chore: allow running Dart/JS Karma at the same time

Use `9876` port for JS.
Use `9877` port for Dart.
feat(transpiler): implement optional params
feat(transpiler): add support for arrow functions

fixes #28
fix(transpiler): only call transform/visit when defined

Our custom ParseTree classes should not expect that every
transformer/visitor defines the methods to transform/visit them.
chore(transpiler): show filepath when error happens
test(transpiler): add spec for instanceof
refactor(transpiler): instanceof
refactor(di): move Dependency from key.js to binding.js
feat(injector): change injector to recover from errors

So it can instantiate an object after a failed attempt.
refactor(injector): cleanup
refactor(injector): change toFactory to use reflector to construct dependencies
style(di): add new lines
refactor(injector): implement support for nested bindings
refactor(di): make use of optional parameters
refactor(di): cleanup to make dartanalyzer happy