Added support for weak abstract methods

This adds the `weak' keyword and permits abstract method definitions to
appear in the same definition object as the concrete implementation. This
should never be used with hand-written code---it is intended for code
generators (e.g. traits) that do not know if a concrete implementation will
be provided, and would waste cycles duplicating the property parsing that
ease.js will already be doing. It also allows for more concise code
generator code.
Proxy methods may now override abstract methods

The method for doing so is a kluge; see the test case for more info.
Classes can now access trait protected members

Slight oversight in the original commit.
Implemented abstract traits

This is just an initial implementation, so there may be some quirks; there
are more tests to come.