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