Handle interfaces and mixin

This change also allows to simplify properties declaration. For instance :

```dart
abstract class Person extends JsInterface implements _PersonProperties {
  factory Person(String name) => new PersonImpl(name);
  Person.created(JsObject o) : super.created(o);
}

abstract class _PersonProperties {
  String firstname;
  String lastname;
}

@JsProxy(constructor: 'Person')
class PersonImpl extends Person {
  factory PersonImpl(String name) => new JsInterface(PersonImpl, [name]);
  PersonImpl.created(JsObject o) : super.created(o);
  noSuchMethod(i) => super.noSuchMethod(i);
}
```

BTW the complete implementation of abstract members are now on XxxImpl.