[WIP] [TACHYON-152] Client write refactor

Rewriting how client writes out blocks to make it easier to add remote blocks.

The current design is as follows:

Users requests access to a block

```java
Block block = Blocks.createBlock(tachyonFS, blockId, blockCapacityByte);
```

From there, the user can write to it by accessing its `Channel`.

```java
WritableBlockChannel channel = block.write();
channel.write(byteBuffer);
channel.close();
```

When the block is full, write returns -1, so you do this in a loop and create new blocks.

```java
while (buffer.remaining() > 0) {
  int n = mCurrentBlockChannel.write(buffer);
  if (n <= 0) {
    // block full, get new block
    getNextBlock();
  }
}
```
2. that might not be that good of a idea.  The usage is internal so the caller will need to figure out how to create the URI; that part is much harder to support on the read path than it is on the write path.

3. based off the current code in master, there is no constructor that controls append.  Also, nothing in the API that goes over this.  

Can we move this conversation into the jira for this PR?  Github keeps hiding this conversation, so harder to track.