feat(mocks): provide support for child scope parameters in compile
perf(bracket): Optimize calling methods on objects.

Optimize the closures used for calling methods on objects by getting rid
of an intermediate "field access" that loads the function from the object.
This allows us to use InstanceMirror.invoke more directly.

Performance
===========
The performance implications of this change look good. On the native Dart VM,
calling methods through the reflective path becomes 4.5x faster. When compiled
to JavaScript, the difference is even bigger and it is 6.7x faster.

Dart VM:
  new: o.f() => g: 18,885,385.384 ops/sec  r: 2,252,149.057 ops/sec   h: 2,233,514.96 ops/sec   i: 32,662,458.941 ops/sec
  old: o.f() => g: 18,118,349.692 ops/sec  r:   496,119.238 ops/sec   h: 6,234,893.68 ops/sec   i: 31,472,943.499 ops/sec

Dart2js:
  new: o.f() => g:  2,618,328.337 ops/sec  r: 1,234,723.632 ops/sec   h: 1,234,745.10 ops/sec   i:  7,507,441.131 ops/sec
  old: o.f() => g:  2,427,133.253 ops/sec  r:   184,727.903 ops/sec   h:   500,226.70 ops/sec   i:  7,461,638.467 ops/sec
perf(digest): Use linked list for watchers

Performance

This makes it a lot faster to add and remove watchers and it doesn't seem to slow down the digest loop.

dart2js (new: linked watchers)

noop: => 153,147,355,556 ops/sec (0 us) stdev(415.89679)
empty scope $digest(): => 567,981 ops/sec (2 us) stdev(0.01002)
adding/removing 4000 watchers: => 406 ops/sec (2,461 us) stdev(0)
4000 dummy watchers on scope: => 7,680 ops/sec (130 us) stdev(0.0002)
3000 watchers on scope: => 201 ops/sec (4,965 us) stdev(0.00001)

dart2js (old: non-linked watchers)

noop: => 153,222,244,444 ops/sec (0 us) stdev(150.92445)
empty scope $digest(): => 537,580 ops/sec (2 us) stdev(0.01016)
adding/removing 4000 watchers: => 1 ops/sec (1,327,937 us) stdev(0)
4000 dummy watchers on scope: => 4,091 ops/sec (244 us) stdev(0.00015)
3000 watchers on scope: => 177 ops/sec (5,638 us) stdev(0.00001)
fix(scope): log firing expressions in the watchLog

Closes #258

Conflicts:
	lib/core/scope.dart
fixup! feat(mocks): provide support for child scope parameters in compile