Cleanup attributes

This does most of the work of `runtime.attrs` at compile time except when attributes are being inherited.

Semantic impacts:

 - `terse` is now allowed as an attribute name.
 - Multiple identical attributes are no longer allowed, and throw a compile time error.  Previously the last value to be set would win.