Solve chainActive-related locking issues 

- In wallet and GUI code LOCK cs_main as well as cs_wallet when necessary
- In main.cpp SendMessages move the TRY_LOCK(cs_main) up, to encompass the call
  to IsInitialBlockDownload.
- Make ActivateBestChain, AddToBlockIndex, IsInitialBlockDownload,  InitBlockIndex acquire the cs_main lock

Fixes #3997