HttpClient: Wrap errors with error classes
metadata-service: Add metadata-service datasource

Move the old metadata-service datasource to url datasource. This new datasource
checks for the existance of meta-data.json and if it doesn't exist, walks the
meta-data directory to build a metadata blob.
metadata_service: Add tests for constructing metadata