Allow storage drivers to add metadata to locations

This patches allows a storage system to add metadata to a location.
For example, if a location is a file:// URL the storage system may
wish to add information about it like the following:
{'FS': Gluster, 'mountpoint': '/usr/local/', 'namespace': 'abc-efg-xyz'}
Such information can be useful to a client with access to the direct
URL (often times the URL alone cannot encode enough information).

With this change when new data is added to the store a dictionary
is returned along with URL.  That dictionary is then stored in the
DB with the URL.  It is up to each store to determine what is in this
metadata dictionary.  Possible way to do so are with a configuration
file.  This patch does not included storage systems (other than tests)
that set this information.

If the API service is configured with the follow options:

    show_multiple_locations = True

then the location and the location information is returned with the
image information in the field 'locations'.  locations is
a list with the following format:

{'url': '<url>', 'metadata': <a storage specific dict>}

With this patch it will always be a list of one, but future patches
relating to the blueprint multiple-image-locations will allow for more.

blueprint: direct-url-meta-data
blueprint: multiple-image-locations
docimpact: show_multiple_locations

Change-Id: Ia832b8a8366bb06bfbaa53871af39a6a10b5721d
Merge "Allow storage drivers to add metadata to locations"