Create the Crafty model component with core `attr` updates.

This is an alternative to #693

The main differences are:
 * Saves data to the root of the component.
 * Triggers `Change[*]` events, compared to `ChangeData` events.
 * Updates on `Crafty.attr` to work with recursive setting/getting. BACKWARDS COMPATIBLE! [: