Major refactoring

Addresses many of the goals of Issue #54.
Would appreciate any thoughts on how to make tests cleaner, still relying on `Retriever` to test `Formatter` and `Templates`.
Also not thrilled with how the child nesting code in `Retriever` needs to rebuild the entire data structure. Didn't see a clean way to fix that, since you lose the nice ordering that existed when the list was originally built.