Further flesh out functionality

Blocks can now be added in any order, and they get properly wired up
Storage back-end keeps a list of Roots and Tips for querying against
Blocks keep track of their own children, so when a chain reorganization happens, we don't have to scan the entire database looking for children of the block being altered. That makes the back-end a doubly-linked list, so larger in file size, at the tradeoff of processing faster once the database grows.