Be sure to send the content length

- Bug Fix: Use the correct headers when uploading a block
- Enhancement: log the function being called around the request/response data (optional, but good to do)
Enhancement - Splitter API

- Added convenience function to deuceclient.api.Block in order to easily generate the block ids in a re-usable manner
- Added base class for the API for splitting data up into numerous blocks
- Provide one implementation of the base class that splits data into uniformly sized chunks except for the last portion of data which may be up to that size
- Added tests
--- Added tests for the __log_response_data and __log_request_data to ensure full test coverage
--- Added test for the re-usuable block id generator
--- Added tests for the new data splitter functionality
------ Added re-usuable function for generating a reader stream
------ Note: 3 tests (those related to generating multiple blocks and storing in deuceclient.api.Blocks) still fail; trying to figure out why
Bug Fix - input_io validation/enable use of temp files

- at least tempfile.NamedTemporaryFile did not have 'read' as a listed attribute
--- changed method of detection from listing the attributes to trying to use the read function to read nothing
--- changed the make_reader() to be able to support either the memory buffer (io.BytesIO) or a named temporary file
--- changed tests to use a temp file in one case so as to exercise the read function detection logic
- Note: Using the temporary file (a read File-like Object) did not resolve the issue with the three tests, they still fail; keeping this as it provides additional kinds of testing and it did uncover a bug that would have cropped up later if someone tried to use a temp file
Documentation

- Adding documentation regarding the logic of why something is done the way it is
Bug Fixes

- Bug Fix: Null byte array ends up matching the same block-id so it keeps getting overwritten in the tests; might need to use case that one too
- Simplification: Instead of trying to use the 'read' function, see if it's in the attribute list using getattr(). dir() is not guaranateed to provide it.
- Simplification: shell should use the make_id provided by deuceclient.api.Block
Merge branch 'enhancement_test_validation' into bugfix_upload_content_length

Conflicts:
	deuceclient/tests/test_api_block.py
Bug Fix - splitting a file reliably

- The previous version would split a file and successfully de-dup it using the api.Blocks storage. However, for the splitter this is incorrect. We don't want to de-dup it here - that is for the api.File to do. We only care about getting the data out of the input source.
--- Fixes by using a list ([]) instead of a dictionary (api.Blocks) to store the blocks when returning multiples from the splitter
--- Fixes by adding the offset with the Block and returning it as a tuple when getting a single block
--- Adds dependency on the input source having 'tell' support; kind of required any way just not explicitly yet
- Added support for testing with null and non-null data buffers so that we can determine the differences that the two should or should not have
--- For the file splitter there should be no difference
--- Added another series of tests to show that there is no difference between using a null and non-null data buffer
Cleanup

- Removed unused import
Enhancement - Validation

- Moved some validation checks from in-code to using stoplight on the parameters
Merge branch 'master' into bugfix_upload_content_length
Enhancements

- better isinstance() check for list object
- better assertion types used
Enhancement - better list instance testing (cont'd)
Merge pull request #27 from BenjamenMeyer/bugfix_upload_content_length

Bug Fix (upload content length) and Enhancement (File Splitting)