only use a write lock on memory cache when clearing
split block storage into header & transactions, headers can now be downloaded and chained separately from transactions, and transaction lookup no longer requires retrieving a full block from storage