feat(scope): add new createProtoChild method

Internalizes PrototypeMap, and allows for easier switch to ContextLocals.
feat(compiler): support ScopeAware for decorators

Even though decorators can safely inject scope (even after the proposed
context change), they might pick up ScopeAware from a base class shared
with components. Instead of manually calling super.scope = scope, we
support ScopeAware for decorators (similarly to Attach/DetachAware.)

There is no performance reduction on the tree benchmark.
refactor(NgElement): NgElement inject RootScope instead of Scope.

NgElement only uses scope to access rootScope, so now we directly inject
RootScope.

This is needed for future change #1429 which disallows Scope injection
into controllers. Since NgElement depends on scope it would also be
disallowed, unless we change it to directly use RootScope.
Revert "feat(compiler): support ScopeAware for decorators"

This reverts commit 9659dd1721c8011bd26d1855ca268a967805c4e2.

Wrong version of this PR was added in master, correct version is in
g3v1x.
feat(compiler): support ScopeAware for decorators

Even though decorators can safely inject scope (even after the proposed
context change), they might pick up ScopeAware from a base class shared
with components. Instead of manually calling super.scope = scope, we
support ScopeAware for decorators (similarly to Attach/DetachAware.)

There is no performance reduction on the tree benchmark.
chore(introspection): clean up workarounds for dart 1.4 and 1.5
fix(scope): fix a potential memory leak
perf(view): increase view instantiation speed 40%

1) Stop using futures when the value is already cached
2) Remove adding nodes to fake parent during view instantiation

Closes #1358
feat(core, testability): PendingAsync service

A new PendingAsync service that is used to track pending async
operations in Angular.  VmTurnZone ties in to this service to track
timers as async tasks and correctly handles canceled timers.  Http
registers async tasks for network requests.  The Testability API uses
the new API to provide a much more useful whenStable implementation.
refactor(DirectiveInjector): better var names and comments
feat(scope): component is the new context

BREAKING CHANGE:

Scope context is set to the component instance that trigged the creation
of the scope (previously it was of a PrototypeMap.)

Repercussions:
1) You can not inject a scope in a component or in the root context any
more.

As the Scope context is set to the Component instance, the scope could
not be injected any more. Components should implements the "ScopeAware"
interface and declare a "scope" setter in order to get a reference to
the scope.

before:

     @Component(...)
     class MyComponent {
       Watch watch;
       Scope scope;

       MyComponent(Dependency myDep, Scope scope) {
          watch = scope.rootScope.watch("expression", (v, p) => ...);
       }
     }

after:

     @Component(...)
     class MyComponent implements ScopeAware {
       Watch watch;

       MyComponent(Dependency myDep) {
         // It is an error to add a Scope argument to the
         // ctor and will result in a DI circular dependency error
         // The scope is never accessible in the class constructor
       }

       void set scope(Scope scope) {
          // This setter gets called to initialize the scope
          watch = scope.watch("expression", (v, p) => ...);
       }
     }

or:

     @Component(...)
     class MyComponent implements ScopeAware {
       Scope scope;

       MyComponent(Dependency myDep) {
         // It is an error to add a Scope argument to the
         // ctor and will result in a DI circular dependency error
         // The scope is never accessible in the class constructor
       }
     }

2) The parent component to an NgForm must have a "$name" field to store
   the form instance.

closes #919
closes #917
chore(travis): revert blacklist Dart SDK 1.7.0-dev.2.0

This reverts commit e2350cac61dc33053504c70be4d1d5411e0f2040.

Current Dart dev sdk version has advanced past the buggy version.

Closes #1447
chore(travis): remove dart version blacklist for 1.7.0-dev.1.0

Closes #1443
chore(clean-up): remove *.orig files accidentally introduced

Modify .gitignore to prevent this from happening again.
fix(components): do not reinsert nodes during redistribution if they have not changed
fix(shadow_boundary): change ShadowBoundary not to reorder styles when prepending them
chore(DI): update to v3.1.1+

This is a breaking change: all classes that are instantiated via the DI
should be annotated (with one of @Injectable, @Component, @Decorator or
@Formatter).

Before this PR, the annotation were not enforced and the code could
break while switching to the static version of the DI because of a
missing annotation.

The impact on user code should be very limited as non-annotated classes
would not have worked before anyway. The error message is now clearer.
chore(DI): update the version of DI to 3.3.0