This is a huge change, which includes some changes to replace code that
originally cloned to reuse allocations instead. The updated
`elastic-array` crate renames its consuming `Vec`-conversion method to
`into_vec`, which means that I can do a simple
`sed -i 's/to_vec/into_vec/'` and then fix the compilation errors.
This commit is probably a minor performance win and definitely a
significant readability win.
* triedb cleanup
* factor out common portion of trie query
* allocate far fewer times in node decoding
* fix bench compilation
* introduce OwnedNode variant to make iter fast again
* generalize recorder trait to Query
* decode trie outputs cost-free in state
* test for passing closure as query
* optionally use no mangling for accountdb
* add the recorder module
* get_recorded for tries, no virtual dispatch on readonly tries
* add recording test
* small cleanups in trie
* Memory trie skeleton
* decode nodes from RLP
* memorytrie -> memorytriedb
* implement Trie for MemoryTrie
* partially implement insert
* implement trie insertion
* don't load whole trie into memory, lookup across memory and db
* re-implement insertion and lazily load necessary nodes from DB
* node removal w/o fixing
* reduce churn in node storage
* finish remove implementation
* committing the in-memory trie
* reload root node after commit
* generate elastic arrays when converting nodes to rlp
* port triedbmut tests over to memorytriedb, fix a few bugs.
* hash count and dirty flag
* initial attempt for node inspection
* back to skeleton
* inspection framework
* implement insertion
* no panic paths in insert
* implement deletion without fixing
* node fixing
* commit nodes to db
* tracing targets and bugfix
* get tests to pass with a lot of tracing
* set playpen iterations to 10
* remove some tracing statements
* make TrieMut::root take &mut self
* replace triedbmut with memorytriedb
* treat empty insert value as removal
* add test for null insert
* fix some style concerns
* trie: use nodehandle for root_node, minor cleanup