Chain server, chain downloader, and checkpoints

The chain server/downloader allows rapidly downloading all blocks past a certain number from a known node on the network.

This branch also implements checkpoints, such that block signatures are not validated prior to the last checkpoint. At each checkpoint, the block ID of the local block is compared against the block ID of the checkpoint, which validates all blocks up to that point. This allows for rapid processing of historical chain.