MongoClient() updates, lock race fix, write concern support

I've added logic to use MongoClient() if it's available, and to fallback to Mongo(). Along with that comes the now defunct 'safe' mode being used with Mongo(). Write concern/preferences are now used with MongoClient, and it fallsback to 'safe' mode with Mongo().

New config options:

connection_opts -- array of options to pass down to MongoClient()
write_concern -- same default as MongoClient, 1, can be changed to 2+ to require writes to secondaries
write_journal -- same default as MongoClient, false, can be enabled to require journal before ack

I also updated gc() so it uses w=0 instead of safe=false if using MongoClient.

I replaced ->save with ->insert in lock(), fixing #1. The lock is now using insert. I tested and confirmed the duplicate key exception gets thrown. The catch properly ignores that exception, but also now properly breaks out on any other exception (like write concern timeout).

I fixed a potential lock-out issue when a replication time out occurs. The class now calls unlock() to remove the partial writes (mongodb doesn't do this on it's own).

Updated dbInit() to use createIndex() instead of the defunct ensureIndex() for > '1.5.0'
can be simplified with `'safe' => $this->getConfig('write_concern') > 0`

But overall, see my concern below with regards to `write_concern` configs and how they're managed.