Initial implementation of storage layer path mapper

We've added a path mapper to support simple mapping between path objects used
in the storage layer and the underlying file system. The target of this is to
ensure that paths are only calculated in a single place and their format is
separated from the data that makes up the path components.

This commit only includes spec implementation to support layer reads. Further
specs will come along with their implementations.
Merge pull request #729 from stevvooe/storage-path-mapper

Initial implementation of storage layer path mapper
Fixes formatting in errors_test.go to match gofmt rules
Merge pull request #733 from BrianBland/drone-fmt

Fixes drone build
Clarify repository naming constraints for registry API

After discussion, it was found that one of the proposed regular expressions
incorrectly limited separator delimited compoonents to two characters. The
desired restriction is to have repository name components limited to two
characters minimum. This changeset accomplishes this by wrapping the regular
expressions in a validation function, returning detailed feedback on the
validation error.

With this change, the repository name regular expressions are no longer enough
to respond with 404s on invalid repo names. Changes to the router will need to
be added to support this.
Fixes "go vet" for drone CI

Removes "go get" commands for go cmd packages to use the default
versions
Also updates client/client.go to conform to go vet style
Merge pull request #737 from BrianBland/drone-vet

Fixes "go vet" for drone CI
Merge pull request #736 from stevvooe/repository-name-clarification

Clarify repository naming constraints for registry API
Fix drone
Merge pull request #738 from docker/test-drone

Test
Adds push/pull client functionality

These methods rely on an ObjectStore interface, which is meant to
approximate the storage behavior of the docker engine. This is very much
subject to change.