Support binding to detached nodes

Specifically this handles the scenario of binding to nodes not yet added to the DOM, but will be added at some future point.
Make sure observable view model subscriptions are cleared correctly; add a spec that passed before the changes in f7f48b1715, and now passes again with the changes here.
Make sure "body" is always matched by domNodeIsAttachedToDocument (compareDocumentPosition doesn't consider a node contained within itself).
Added an extra condition to make sure that observables are compared correctly within an array. `typeof observable == "function"` returns true for observables, so they are treated like a predicate instead of value. With this check, the observables are compared like values.
Add tests showing proper behavior when removing or "destroying" observables in an observable array.
Exposed the $item variable within a foreach binding. $item refers to the raw, potentially wrapped value, where $data does not.
Don't unwrap observable array items in the foreach binding; instead let the binding context manage it. The result of this change is that if the observable is updated, only the underlying binding are updated (using the new observable view model system) instead of the whole template (re-rendering and re-bindings the elements).

Add tests for this change and the previous $item addition.
Use documentElement instead of body in domNodeIsAttachedToDocument.
Add Grunt build file. Update package.json to use Grunt.
Ignore node_modules when checking for trailing spaces.
(Note that the grunt build script doesn't check for trailing spaces yet)
Add grunt client so travis can build.
Use $rawData in place of $item for referencing an observable view model. $rawData will work for any observable view model, not just for ones in an array.
Remove $dataFn from the binding context because $rawData works fine as a replacement.
In binding processor, only create computed observables if needed.
Remove whitespace line typo and add a comment
Merge branch '1040-fewer-binding-computeds'
Add trailing spaces check to Grunt build script. Only output tests using TapReporter when running through Testling.
Minor refactor to make getCombinedSources runnable at any time
Update build instructions in README.md
Remove obsolete files