Rwmutex block

ZOMG THE CHANGES!

This is a pull requests of a different way of dealing with caching, and reads and writes in GDAL. The biggest part of this change is the addition of a different way to do IReadBlock, IWriteBlock, IRasterIO, etc. There is now a mutex being passed as well as the data, so that the source data might be protected during writing. It also prevents deadlocks by being very picky in the drivers when it locks and when it does not. The downside is obvious. LOTS OF CHANGES, lots to go wrong.

I haven't fully tested everything yet, but wanted to put this here so we can compare against the other ways doing the locking.