feat(eventHandler): Support snake-case event names instead of camelCase.

Closes #1434
Closes #1478

Closes #1477
fix(DirectiveInjector): fix exceptions

Closes #1484
doc(routing): event.allowLeave() is on the PreLeave event since 0.4.21

Closes #1469
perf(util): call toLowerCase() only where needed

Closes #1468
chore(ng-class benchamrk): fixes

Closes #1465
test(parser_spec): fix analyzer warnings

Closes #1430
chore(DI): update to v3.1.0+

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.