Major refactor of how blocks/trx are stored

Instead of storing blocks + trx_id=>location we now store
trx_id=>trx_record and the block digest.

This means we now assemble blocks upon request from their parts rather
than just loading the block from disk.  This allows us to store extra
meta-information about every block and every transaction in an effecient
manner.