feat: HEAD /blocks/{block_id} endpoint

on a HEAD, the block is checked for existence in the metadata store,
after which its checked for existence in block storage.

- If present in metadata, and non-existent in block storage:
     502 Bad Gateway is returned along with an explanation.

- If present both in metadata and block storage.:
     200 OK is returned along with headers such as
     x-block-reference-count

- If not present in metadata:
     404 Not Found is returned
move:consistency check logic from resource to model

Addressing review comments:
Consistency check now takes place in the model, and exception thrown
if consistency check fails. The exception is caught in on_head function
of Block's Item Resource and corresponding status code (502) set
in response.
Merge remote-tracking branch 'upstream/master' into head_block_endpoint
fix: check for block existence instead of getting the block

the model now has a has_block() function which checks for existence
in both metadata and storage.
check: vault existence

return a 404 if the vault does not exist.
fix: status code 200 to 204

Addressing Xuan's comments:
Since we are returning an empty body here, with most information
in the headers, we return a 204 with RESTful standards in mind.
exception: Consistency Error fix

- Fix Consistency Error Exception to be very explicit about what went
  wrong. The ConsistencyError Exception now outputs a message regarding
  the blockid, vaultid and the project id that caused the exception, and
  that message is logged.

- Prefix helper functions not intended for public consumption with '_'
exception: Consistency Error extra param 'msg'

- Adds additional context by passing 'msg' when raising
  Consistency Error
- Return Consistency Error's thrown message back to client
fix: order of params in Consistency Exception

- Add Tests for msg being present or not being present as
  additional parameter
Merge pull request #161 from TheSriram/head_block_endpoint

feat: HEAD /blocks/{block_id} endpoint