Revert "extract dirty key marking into a private method"

This reverts commit 0157cbd3acac1686fe06e9b8eb50158511ec5c5e.
Make StateMachine its own class with transitions.

 - StateMachine is now a class which is subclassed to define a
   transition table, instantiated, and attached to an instance or class.
 - Instantiated state machines are told to transition states by 'doing'
   a transition, or by calling the function named after the transition
   on the state machine. Example: 'stateMachine.do('switch')' and
   'stateMachine.switch()' are both ways to transition a state machine
   which has a 'switch' transition.
 - StateMachine transitions may return false if the state the machine
   is currently in isn't listed in the transition table for the
   transition underway.
 - record.get('lifecycle') now holds a record's state machine.
 - A record's state can be bound to using
   someRecord.get('lifecycle.state').
 - Model class' state is held in a 'lifecycle' accessor. Bind to it
   using a keypath like `Model.lifecycle.state`.
 - Record manipulations will now callback with state errors if an
   invalid transition is attempted.

Fix #112, #95.
Update StateMachine to not be wishy washy on destinations, allow shorthand for many source states, and publish events
Add load pipelining and fix tests.

Fix #340, #170.
Change StateMachine semantics to be in the new state when the transition and event-name callback fire
Change StateMachine internal enter and exit event naming scheme since we want to reserve the : for observing events at keypaths.
Propagate events from a record's lifecycle state machine to the record itself.
Add the RenderCache for storing rendered views and evicting the given an absolute size limit on an LRU basis.
Make Batman.Controller use a RenderCache for its implicit renders.
Switch Batman.RenderCache to a simpler Hash implementation.
Ensure Batman.Renderers always have a reference to the view they are rendering.
Always append a view's root node instead of appending its children in some cases.

 - This reverts the changes prompted by #213.
 - The rationale is this: the complexity introduced by a view not having a true root node is not worth it. CSS might break, but it can be changed, and it can be argued that CSS that breaks with this change is crappy in the first place. When views have a root node which is the exact node which ends up in the DOM, getting it in there and importantly getting it out of there is far easier. As Views become more long lived objects which persist beyond one render, they need to be able to retract/hide themselves, whereas before they lost a reference to all their nodes because they were appended to different parents. Now, a View knows exactly what is in the DOM. The brittleness imposed by a View's wrapper always being a div will be remedied by allowing A) different elements, B) ids and classes similar to Backbone or Ender views, and C) allowing templates to declare that they have a root node instead of making views wrap them by default.
Rerefactor yields into object oriented evented goodness.

 - Explicitly clear yields during controller dispatch
 - Create a Yield class which queues its append, clear, and replace operations until it has a node
 - switch the data-yield/contentfor/replace bindings to use the Yield objects
Remove old function based ready handler on View.
Move yields onto the View object which generates them.

 - Rendering a view now stores the contents for yields that view will populate on the view's yields property.
 - Once rendering is finished a view will insert those contents into the appropriate positions
 - Upon removal from the DOM the view will retract its yields, holding reference to the nodes for the next time it needs to be inserted.
 - Batman.DOM.willRemoveNode, Batman.DOM.didRemoveNode, Batman.DOM.willInsertNode, and Batman.DOM.didInsertNode are all much clearer and called everywhere in the $helpers. Before, appendChild would sometimes not call didRemoveNode, and usage of $unbindNode and $unbindTree was very unclear.
 - DOM insertion and removal hooks are recursive such that show, hide, and view's disappear and appear will be called on any node having them defined in the hierarchy of the node being inserted or removed.
Remove a bunch of extraneous delays which do nothing other than slow down the tests.
Implement yield insertion and retraction.

 - yield contents are stored on the node and then appended/detached from their destinations when the root node of the view is inserted or removed
 - the view helpers now simulate dom insertion by calling will/didInsertNode
Remove clearAlling of yields upon controller dispatch because yields should retract themselves.
Null out options references instead of deleting.
Remove object-key warning from Property about memory leaks.