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