feat(di:) add OpaqueToken to DI

Using `new Object()` as a token causes cryptic errors. OpaqueToken class should be used instead.

Closes https://github.com/angular/angular/issues/223
maybe private, since it is accessible through `toString`, but we don't want any mutations.