User Commands
=============
* put [bucket] [path] [file]
* put [bucket] [path] < stdin
* get [bucket] [path] > stdout
* verify-bucket [bucket]
* verify-object [bucket] [path]
* fix-bucket [bucket]
* fix-object [bucket] [path]

stderr prints json on error

System Commands
===============
* initialize-repo
* split-stream
* merge-stream
* encode
* decode
* add-to-index
* add-to-store
* get-from-index
* get-from-store
* crc
* md5sum-stream
* verify-repo
* verify-object
* whitelist-failure

Potential Workflow Pseudocode (single pass)
=============================
```sh`
add /bucket/name local-file
    localFile : io.Reader = open(file)
    md5sum-stream localFile
    chunks = split-file localFile
    for each chunk in chunks:
        encode chunk
        crc chunk
        add-to-store name,chunk,length,crc
    add-to-index name,chunkcount,md5,ts
```