Headers-first synchronization

Here's a first (well, second) version of a fully-functional headers-first synchronization.

Many changes:
* Do not use 'getblocks', but 'getheaders', and use it to build a headers tree.
* Blocks are fetched in parallel from all available outbound peers, using a limited moving window. When one peer stalls the movement of the window, it is disconnected.
* No more orphan blocks. At all. We only ever request a block for which we have verified the headers, and store it to disk immediately. This means that a disk-fill attack would require PoW.
* Some new fields in getpeerinfo:
  * 'syncheight': the height up to which we've validated this peer's headers.
  * 'commonheight': the height up to which we have all blocks in common with this peer.
  * 'inflight': the heights we're currently requesting from this peer.
* Require protocol version 31800 for every peer (released in december 2010).
* No more syncnode (we sync from everyone we can, though limited to 1 during initial *headers* sync).
* Introduce some extra named constants and comments.
* Reindexing support for out-of-order blocks on disk.

Almost?  should be always unless the peer is broken. :)   of course, unless its sitting around doing nothing there will be data in flight.   A result is that you should loadbalance onto faster peers, so while there is some discovery overhead here it should be finite.

Further optiimzation could make it somewhat more efficient, e.g. premetively discontinuing requests (and then disconnecting) peers that get close to but not quite stalling... but that should probably be future work. (It would add a fair amount of complexity)