Revamped the way attributes are registered with their owning objects.

This eliminates the manually maintained boilerplate of getAttributeCount and
getAttribute, and tidies up some undesirable mutability in the object and
attribute internals.
Updated the attributes in the chat demo, regenned code.
Properly handle expected and unexpected closures.
Added useful toStrings.
Use Guava, not Guava JDK5.

Guava JDK5 is a scourge on the Earth that should not be touched with a ten foot
pole by projects that are sensibly built on technology invented in the last
decade.
Properly visit type variables when processing inner-most type.

Previously if we saw something like: DService.Factory<FooService> we'd jump
right to processing DService and ignore the type parameters of Factory. But we
need those type parameters. So visit 'em!
Made it possible to test with multiple compunits.

Also added a test for previous commit.