Bug Fix Block Size

- Enforce that the specified size of the data matches the actual size of the data when adding a block (both store_block and store_async_block)
- Fix the block put end-point to correctly get the content length even if the caller forgot to specify it so that we have it for the validation (above) and database if everything matches
- Fix Cassandra so that it does not incorrectly register a block
Updated the comments to reflect why - essentially, mock supports having multiple calls.

Normally you only provide one entry; however, mock really operates with the idea of a list. When it runs out, it no longer provides a mock object and the call goes through as normal (IIRC).

That is
```
with mock.patch('builtins.open', mock_open(), create=True):
    x = open('/dev/urandom', 'r')  # this receives the mock_open() object
    y = open('/dev/random', 'r')    # this does not
```
This is fixed with:
```python
open_values = [mock_open() for _ in range(2)]
with mock.patch('builtins.open', open_values, create=True):
    x = open('/dev/urandom', 'r')  # this receives open_values[0]
    y = open('/dev/random', 'r')    # this receives open_values[1] 
```