crtp!

Refactored heavily so that there is a high reliance on the curiously
recurring template pattern (crtp). This makes it easier to code
variations.

Added an ordered trie node.
Added a path struct to recreate keys in the trie.
Added a pre-order depth-first traverser of tries.
Added trie structures (basic_trie, trie_set and ordered_trie_set) that
will wrap a node and provided useful functionality.
Added rudimentary test cases.