datastore package port

Initial port from the appengine/datastore package, adapted to work with the v1 API

Major changes:
* A specific Client interface is used instead of appengine.Context
* The Multiple parameter in properties has been removed, this is now autodetected
* appengine specific types were moved into the datastore package (GeoPoint, BlobKey)
* Direct support for GeoPoints was removed as it's not supported by the v1 API, they're now serialized like every other struct
serialized like every other struct
> How can I merge in the context changes without having all those commits added to my PR ?

When you pull from upstream (GoogleCloudPlatform/gcloud-golang), the diff shouldnt be showing the commits you've merged from the upstream.

> I was also wondering how we wanted to support changing the basepath
We can put a the base path as a context value.

ctx := cloud.NewContext(...)
ctx = context.WithValue(ctx, datastore.ContextKey("base_url"), "some other base")

See http://godoc.org/code.google.com/p/go.net/context#WithValue.