Change OAuthScopes into an interface as opposed to boilerplating annotations

Particularly in google storage, incorrect `@OAuthScopes` annotations were pasted in a lot of places, guaranteed via also pasting them in tests. This change avoids copy/paste issues, as the current clouds we support have a rather simple set of rules. For example, the following sets up google compute for almost all api usage:

```java
      bind(OAuthScopes.class).toInstance(ReadOrWriteScopes.create(
            "https://www.googleapis.com/auth/compute.readonly",
            "https://www.googleapis.com/auth/compute"
      ));
```

Details:

 * Change OAuthScopes into an interface as opposed to boilerplating annotations
 * Fixed errors because of boilerplating annotations.
Cure is worse than the disease on this one. Because input param to the
constant function is Object, you would have to create your own, just to
satisfy generics. That made the actual code dwarfed by dealing with
generics. Hope this makes sense.