Uses a cleaner syntax for decorators (and allows symbols.
Initial work on refactoring the core protocols.
Merge.