Associated field inheritance

Yet another servo DOM proposal, by me and @eddyb

This Proposal is about solving the servo DOM design requirements through a combination of a few  orthogonal features and extensions that are useful on their own:

- Allowing upcasting of a trait object
- Extend trait objects to include associated fields that map to fields of the implementing type
- Allow opt-in use of an internal vtable for an trait object hierarchy.
- Provide composition sugar for struct fields, and make it usable for associated fields too.
- Ability to call the default implementation of a trait method, even if a implementer overrides it.
- Ability to override associated items of a trait with default impls in a sub trait.

By combining them in the right way, its possible to model something that behaves similar to an inline-vtable single-inheritance OOP system with trait objects.

[Rendered view](https://github.com/Kimundi/rfcs/blob/associated_field_inheritance/active/0000-associated-field-inheritance.md)
The complexity it adds is not worth anything IMO. My suggested workaround generates exactly the same code (modulo one function inline) and makes everything more explicit without adding any verbosity.

As for C++ interop, this shouldn't make any difference- calling C++ from Rust or vice versa already has all the functions and vtables defined, whether with multiple layers of overrides or the workaround I suggested, so the calling side wouldn't be implementing any defaults, let alone overriding them.