Adds storage driver interface, tests, and three basic implementations

Re-opening of #630 with the new orphan next-generation branch.

@dmp42 @wking @bacongobbler @noxiouz 
On Tue, Oct 28, 2014 at 03:48:10PM -0700, Olivier Gambier wrote:
> Maybe we don't hear the same thing with
> "content-adressibility". This is about being able to retrieve a
> given binary payload from an id that can be computed again from that
> binary payload. This is what tarsum is for, and I simply fail to see
> a point in asking driver author to copy the same code over and over
> again in every implementation.

Right.  To me “an id that can be computed again from that binary
payload” sounds like “we don't need move”.  If you want to specify
that id for the initial write, that's fine [1].

[1]: https://github.com/docker/docker-registry/issues/626#issuecomment-60843683