Implements custom events for web components

This is another way to implement the custom events issue #242 .
The implementation basically relies on the fact that 'WebComponent', in a way, extends 'Element' (which looks like it will in the future).

Here is a simple example to illustrate the idea:
For a simple non-custom elements: (original behaviour)
```html
<button on-click="...">click me</button>
```
the generated code looks something like this:
```dart
var __e1 = ...;
__t.listen(__e1.onClick, ($event) {...});
```
For a custom element (or Component):
```html
<x-foo on-bar="handleBar($event)" on-click="handleClick($event)"></x-foo>
```
the generated code looks like this:
```dart
var __c1 = new FooComponent()..host = __e1;
__t.component(__c1);
__t.listen(__c1.onBar, ($event) { handleBar($event); });
__t.listen(__c1.onClick, ($event) { handleClick($event); });
```
In this case we are listening on the actual component object instead of its element representation. 
I have created some examples to illustrate how this can be used in example/component/custom_events

Let me know what your comments, ideas and thoughts are on how you see this done