Implemented improved tst tree, called tst_compact

I assume by storing full key in leaf node, instead of expanding each character
would reduce total memory usage. reason is the benefits of less number of internal
nodes that lead to leaf would overweigh the extra key storage in leaf, hopefully.
Implemented trie as back storage for dictionary, I call it "tst_compact".

Memory footprint shrinked very little. however, the number of
malloc calls reduced greatly compared to tst storage.