implement jasmine-node tests; refactor tests

`npm test` now uses Node by default, primarily because of Phantom's
broken Object.freeze implementation. I should see about fixing that
for them. Anyhow, Travis should use node.

The refactor started well, but the immutability spec is going to be
redone. It should be the only part of the test suite that relies on
environment detection. Since I don't care to test what's broken
*about* each environment, I choose to assert what each environment
currently does for documentation purposes. For environments that
support immutability, the tests will also assert `_tree`'s immutable
properties.