Locally cache oauth tokens.

This change is for both App Engine and Managed VMs so that these apps can scale without running into the app_identity_service quota limit due to calling appengine.AccessToken too frequently.  An added benefit of caching is that calls to Google APIs will be significantly sped up due to removing the round-trip calls to the api_identity_service.
Do we need a fake context? This package shouldn't know about the write protocol of appengine calls. My suggestion was to wrap the actual calls.

~~~ go
type memcache interface{
   Set(c appengine.Context, item *Item) error
   Get(c appengine.Context, key string) (*Item, error)
}

type aeMemcache struct{
  // .. whatever needed
}

func (*m aeMemcache) Get(c appengine.Context, key string) (*Item, error) {
   return memcache.Get(c, key)
}


type mockMemcache struct{
   mu sync.RWMutex
   vals map[string]*Item
}

func (*m mockMemcache) Get(c appengine.Context, key string) (*Item, error) {
   m.mu.RLock()
  defer m.mu.RUnlock()
  // implement timeout, etc.
  return vals[key], nil
}

// ...

// In the actual package,
var m = &aeMemcache{...}

// In your tests,
m = &mockMemcache{...}
~~~