Separate routing into its own method

@alecthomas would you mind taking a look at this? It passes all my tests and seems to work from my end. You should be able to just call `cluster.Route(ID)` now. If it returns nil and nil error, you're the destination. If it returns a pointer to a Node, the message should be forwarded to that Node. If it returns a non-nil error, there was probably a timeout trying to obtain a lock on the routing table or leafset.