Enforces a path format for storage drivers (#819)

Requires all paths in the inmemory and filesystem drivers to begin with
a slash, and then contain only valid path components (2+ alphanumeric
characters with optional period, hyphen, and underscore separators)
delimited by slashes.

Also updates the storage driver test suites to construct paths of this
format, and causes the suite to abort if files are not cleaned up after
the test run.
Adds tests for storage driver handling of valid and invalid paths
Merge pull request #844 from BrianBland/ng-storagedriver-tests

Enforces a path format for storage drivers
Move routes to urls package

To lock down V2 api routing, we are moving it to a separate package, with an
exported router creation function and route names. Updates will follow to
prepare the package for export.
Prepare urls package for exports

The route definition files have been prepared for export with documentation.
Consts have been updated and tests are now passing for the urls package.
Porting registry to use urls package

This simply moves the registry app to be using the urls package and its
exported route names. This supports locking down exported route definitions for
use in client packages.
Move urls.go into urls package
Prepare urls.URLBuilder package for export

The URLBuilder is now exported with documentation for its behavior. Its a light
wrapper around gorilla mux that avoids one having to remember exact arguments
take by each route.
Migrate webapp to use exported urls.URLBuilder package
Correct documentation errors in urls package
Change errors export from Descriptors to ErrorDescriptors
Merge errors and urls package into unified v2 package

To provide a single package with v2 API definitions, the locked down portions
of the API have been merged into a single package. References to exported items
will appear as v2.XXX, indicating their origin. The definitions in this package
will soon be locked down for change, acceppting only additions that will not
change protocol behavior.
Migrate references to consolidated v2 package

Routes and errors are now all referenced from a single v2 package. This
packages exports are acceptable for use in the server side as well as
integration into docker core.
Allow variadic url values for BuildBlobUploadURL

URL values may be required to complete an upload in a single POST request,
which may include digest and size. This is not implemented in the server side,
yet, but is part of the HTTP API specification.
Initial implementation of authorization flow

This is the first outline of access control in the V2 registry. The main point
of interest is the AccessController, which gates access to resources via http
requests. The sillyAccessController gates requests on whether or not they
simply have the Authorization header set for the request.

Testing is minimal, at this point. This commit will likely be binned, broken
down into a few parts and be fully tested.
Split Storage and Auth config types

The last attempt to use the storage configuration type to implement multiple
auth configs broke the external interface of the storage type. This splits them
into two types fixing the unit tests. Support for environment variables for
auth configuration was added, as well.