Change Gruntfile to CoffeeScript

It increases readability and cleanliness as it grows larger.
Remove unused serve Node script

This has been replaced with the `grunt serve` task
Fix SemVer version in package.json and bower.json
Replace grunt-contrib-connect task with custom serve task

The connect server does not accept non-GET requests which caused issues
during testing. This is derived from the previous serve.js file.
Fix specs that assumed element was in jasmine template

This is an artifact from 00e1318
Add change log entry for 2.0.1
Move ContextNode* spec to separate file
Rename property nodeType => type
Implementation of ContextManager

The manager maintains two tree structures containing context nodes.
The `working` tree contains local state and is never overridden by a
sync with a server (since a change could be made prior to the response
returning). The `upstream` tree contains the state last synced with the
server. It contains the last known stable (and applied) state and is
read-only.

The manager exposes methods for defining nodes and facilities for
comparing the working and upstream trees. The nodes themselves provide
methods for checking and manipulating their state. A node is considered
to be _managed_ if a manager has been defined locally for that node.

Nodes now provides mechanisms for declaring their state including:

- isNew
- isValid
- isDirty
- isRemoved
- isEnabled

As well as corresponding events:

- enable
- remove
- change

Branch nodes have been modified to be aware of their child nodes if the
`deep` option has been passed and is true.

Fix #183, fix #184
Update UI components to utilize new state and manager APIs

The concept form now renders a message depending on the state of the
local context. For example, an invalid context will render an error
message and will prevent the filter from being applied/updated.

In addition, a revert button is exposed for existing filters that have
been changed.
Order values by label rather than index

This fixes an issue when comparing the working and upstream condition
values. The difference in order of the arrays caused the condition to
be considered 'dirty'. Sorting against the label ensures the comparison
and sorting is not index-based (i.e. arbitrary).
Fix Bars.setValue to deselect bars

New bars were being selected, but existing bars that were selected
were not being deselected. This now iterates over all values and toggles
them appropriately.
Fix value list race condition due to animation

If a field value item is validated, it may be removed before the animation
to hide the icon finished.
Fix apply logic, add `before:*` events, improve ConcepForm handlers

The `node.apply()` method has been fixed to prevent redundant event
triggers as well as properly handling branch nodes.

The `before:*` events can be used to prepare views for a state change.
Note that the target event is not guaranteed to trigger (like apply)
depending on the processing steps involved.

The ConceptForm has been updated to display the appropriate message
depending on the state of the local context. The error message now only
displays if a filtered is attempted to be applied rather than after each
change.