Use boost::unordered_map for mapBlockIndex

As some profiling by @kdomanski showed that we're doing a very high amount of calls to uint256::CompareTo, in particular for mapBlockIndex operations. So:
* Turn mapBlockIndex into an unordered_map, so it only needs (few) operator== calls on uint256 instead of (multiple) operator< calls.
* Using memcmp for uint256's operator== and operator!=.

That's not possible. Checkpoints and main are a circular dependency, only possible now because checkpoints.h doesn't need main.h. If the type of mapBlockIndex is defined in main.h, it becomes an actual .h circular dependency.

Better solution: move the code pieces of checkpoints to main, and the data pieces to chainparams...