Batman.SetComplement a la Intersect/Union

Adds set complement, useful for splitting out matching and non-matching
model instances in a UI, amongst other things.
Merge branches 'set_complement' and 'flexible_url_nesting'
Merge branch 'master' of https://github.com/Shopify/batman
Merge branch 'master' of https://github.com/Shopify/batman
Make event and observable API's slightly more consistent with onFirst and observeFirst.
Unify POST param serialization to use Batman.URI.paramsFromQuery.

Closes #364.
Build dist

Closes #430.
Loop performance tests.
Make the node dist work through a dirty hack.
Add a node specific $setImmediate implementation.
Refactor AbstractCollection and Style bindings.

 - AbstractCollection binding previously provided more than one
   interface for observing the changes to the collection. This is silly.
 - StyleBinding had all sorts of insane complexity stemming from the
   above as well as the "bind to an object full of keys pointing to
keypaths" feature which AFAIK is unused and really pretty crazy.
 - StyleBinding now uses the abstract collection binding to observe
   hashes, loops over objects, and properly cleans up when the instance
its bound to changes.

Rock out.
Add a `toArray` accessor to hashes indirectly on the meta object and make AbstractCollectionBinding use it.
CollectionBinding fixup
Refactor Renderer to not take a callback because the call signature looks silly.
Refactor IteratorBinding to be synchronous and simple.
Build dist

Closes #430.
Ensure parent segments in nested routes are properly underscored.

- Fix #431.
Add automatic generation of state predicates to StateMachine.

 - This means that as states are defined using the class level
   @transitions macro, functions and accessors are availble to ask the
state machine if it is in that particular state:

@sm.get('isOn')
@sm.isOn()
data-bind="model.lifecycle.isLoading"
Switch the yield clearing strategy to cycle during every dispatch.

 - Yields now track which nodes are added and can be told to clear only nodes which were added before it started tracking them
 - This behaviour is used by controller dispatch to only remove nodes which were added *before* the dispatch started, that is to say nodes who are from other dispatches
 - This behaviour fixes #434 and fixes #411.
 - The first bug above was caused by the controller tracking what yields it rendered into, and then clearing all the other ones. This is wrong because the controller can only know what yields it was explicitly told to render into, but not what yields it's rendered content yielded into. The bug was that implicitly rendered content (e.g. by an inline data-contentfor) could be cleared if the insertion of that content happened during action execution (which only happens if the content has been rendered before and is in the cache). Phew.
 - The new strategy is better because now yields are just told when in time to start caring about which nodes should stick around and which shouldn't. Any nodes added after this point in time stay around and any before don't, so they can come from wherever and not be cleared at the end of dispatch.
 - Note that this whole dance is only necessary because we want nodes that are rendered in two different actions to just stay where they are during the render of the second action. None of this would be needed if we just removed everything from all yields and then reinserted it as it was rendered in the second action, but that results in DOM flicker.
added a test for Batman.Property.withoutTracking