split CBlockIndex in mutable and immutable data

CBlockIndex contains data that can never change (block header,
nHeight etc), it also contains data that can be updated, like
nStatus.

If one updated some data, one had to write all data back to the
database.

This patch stores immutable and mutable data under different keys
in leveldb, so that not all immutable data needs to be in memory
if the mutable data needs to be updated.
Merge branch 'cache_mapBlockIndex' into reduce_mem_usage

Conflicts:
	src/main.h
add function to read CDiskBlockIndex from DB

Conflicts:
	src/txdb.h
Move auxpow from CBlockIndex to CDiskBlockIndex

auxpow was needed in two cases:
1. during CheckIndex, I fixed it by moving this
   function to class CDiskBlockIndex
2. getheaders requires auxpow, we get it from the DB
   on demand

The good thing is, auxpow is not stored in memory anymore.
This reduces the memory usage of i0coind from 8.7GB to 322MB.
Merge branch 'reduce_mem_usage' into i0coin-0.8.x

Conflicts:
	src/txdb.cpp