feat(parser): add support for ternary operator
feat(parser): change Parser to return null when one of the operands is null
feat(parser): throw when expected an identifier
feat(parser): add support for formatters
feat(parser): split parse into parseBinding and parseAction
cleanup(parser): add type annotations to all AST classes
refactor(parser): clean up tests
chore: source maps for Karma/Gulp

For Karma, the source mapa are inlined inside each source file.
For `build/*` output, separate `*.map` file is created.

This changes the API of `tools/transpiler/index.js`. I believe this API
is only used in `gulp-traceur.js` and `karma-traceur-preprocessor.js`.
Instead of returning the transpiled string, `compile()` returns a result
object such as:
```js
{
  js: ‘transpiled code’,
  sourceMap: null || {}
}
```

Closes #20
fix(example): make it work
chore(karma): add karma.conf.js symlink

So that I can run `karma start` instead of `karma start karma-js.conf.js`.
chore: fix modules/build.dart/pubspec

This was failing on Travis because the `pub install` would run before
copying of `pubspec.yml` happened. In fact, I don’t understand how this
worked at all because `gulp.dest` seems to be not forwarding files and
so anything after `gulp.dest` does not get called at all.

Here is the failing Travis build:
https://travis-ci.org/angular/angular/builds/40005692

This changes `modules/build.dart/pubspec` task to use `gulp-changed`
instead of a custom implementation and use a wrapper around `gulp.dest`
to forward files.
chore(travis): fix the build

I don’t know what the issue really is. There is some weird race condition,
where the task copies the file (`pubspec.yml`) and then start `pub get`
which reads that file and the file is not there or is empty.

I have no idea why moving this task into a separate process fixes the
issue but I don’t wanna waste more time on it.