Test and refactor kbucketIndex.

* Handle GUIDMixin transparently.
* Raise KeyError on key with bad range.
* Raise RuntimeError if kbucket invariant is violated.
* Include a hint for a possible optimization.
* Follow python naming conventions.
Test and refactor getContact.

* Handle GUIDMixin transparently.
* Ignore the docstring mentioning ValueError and
  test for a None value on unsuccessful lookup, as
  is the case throughout the code.
* Align signature with kbucket.GetContact and simplify code.
* Follow python naming convention.
Test and refactor removeContact(s).

* Make argument names consistent with rest of tested code.
* Leverage exceptions to simplify code structure.
* Add logging on exception.
* Follow python naming convention.
Support GUIDMixins in RoutingTable.distance

* Expand tests.
* Follow python naming conventions.
Test and refactor touchKBucket.

* Add ability to set timestamp manually.
* Test the abstract method, too.
Drop addContact from TreeRoutingTable.

* Its proper implementation is contested.
* It references undefined names ("addErrback").
* The class itself is nowhere used in the code.
* It is very difficult to test, as it entails the network.
Add and test numToId for easy conversions.

* Refactor _randomIDInBucketRange to use numToId.
Drop _randomIDInBucketRange as it is no longer used.

* Drop unused import.
Factor initialization of RT with N KBuckets.
Test and Refactor getRefreshList.

* Do not use randomized IDs.
* Use a list comprehension for simplicity.
* Avoid invoking time.time() many times. :P
* Optimization: do not enter loop if force flag is set.
WIP 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.