feat: add blockstorage capabilities

The client can now make calls to /storage/blocks endpoints of Deuce
fix: use deuceclient.api.block(s) objects

- Use builtin abstractions instead of returning raw json
- pep8 fixes
- Introduce StorageBlocks class to store collection of storage blocks
Merge remote-tracking branch 'upstream/master' into blockstorage_capability
fix: prefix sha1 to storageid uuid5
fix & refactor: validation

- refactor storageblocks into its own module
- validate storageid in storageblock endpoints
Merge remote-tracking branch 'upstream/master' into blockstorage_capability
fix: param should be block object for BlockStorage functions
Merge remote-tracking branch 'upstream/master' into blockstorage_capability

Conflicts:
	deuceclient/api/vault.py
	deuceclient/client/deuce.py
	deuceclient/common/validation.py
	deuceclient/shell.py
	deuceclient/tests/test_deuceclient.py
feat: add param validation for blockstorage calls
fix: change of rules while Instantiating Block class

- A 'block_type' parameter has been introduced which says if the
  instantiated Block object is either storage or metadata. It prevents
  change from what it has been instantiated with.
  For example: if its instantiated with block_type='storage', the object
  cannot update or reset block.storage_id
  Vice versa in the case of block.block_id when instantiated with
  block_type='metadata'

- By Default the 'block_type' param is set to be 'metadata'

- Change in REGEX rule for storage_id to make it more maintainable,
  since its metadata + '_' + uuid
fix: validate values - inserting (storage)block object into Blocks Object

- val in __setitem__(self, key, val) is now validated with
  MetadataBlockType Rule and StorageBlockTypeRule

- The current functionality shall be in place till
  https://github.com/rackerlabs/deuce-client/issues/26 is solved

- Better Error messages when trying to update storage_id, block_id
  given that the operation is not allowed

- Some Typos and repeated docstrings corrected

- Tests refactored, to make introduce sorted lists of uuids, instead
  of hardcoding them
fix: storageblocks fix head blocks

- block_id needs to be set to 'None' if X-Block-ID is None, so the
  stoplight rule on block_id.setter has now been set to
  MetadataBlockIDRuleNoneOkay

- block_orphaned needs to evaluate boolean expressions properly.
  Since even bool('False') equates to True, since it aint a empty
  string

- create a helper function for testing, that allows creation of
  storageid from a given blockid(sha1)

- InvalidBlockType now inherits from InvalidApiObjectInstance in
  errors.py
fix: docstrings and tests

- Add docstrings to block storage functions

- Cleanup test helper functions for creating a storage_id
Merge pull request #11 from TheSriram/blockstorage_capability

feat: add blockstorage capabilities