Refactor addContact and splitBucket.

* Move splitBucket to OptimizedTreeRoutingTable; leave
  an abstract method behind.
* Refactor splitBucket to be as race-condition-y free
  as possible (without locks).
* Replacement cache is now a list of OrderedDicts.
* The failedRPC attribute is no more.
* Straighten and DRY addContact.
* Follow python naming conventions.