datasource: Refactoring datasources

To help alleviate naming collisions, move each of the datasources into their own package. In the near future, we are going to add support for new metadata services so make a distinction between the metadata service types. This will deprecate `--from-metadata-service` in favor of `--from-<type>-metadata=<address>`.
Minor style nit/suggestion - my usual pattern for this kind of thing would be something like:

```
type metadataService struct {
  root string
  client pkg.HttpClient
}

func NewDataSource(..) {
  ...
  return &metadataService{root, pkg.NewHttpClient()}
}
```

then you can just have a single `IsAvailable()` method, and in tests, don't use `NewDatasource()` but rather instantiate directly:

```
testms := &metadataService{"/foo/bar", &testHttpClient{}}
```