(#18) - normalize recursively

@neojski was right: we weren't normalizing recursively, and I've got the failing test to prove it.  The current code is good (I believe), but I have two reservations about it:

* why are we bothering to test collation of functions?  in what situation would a user put a function into a document?
* `JSON.parse(JSON.stringify())` may be bad for performance, but if it is, we can always replace this later by doing it manually.