Improve performance by adding a step to DOM point conversion cache

This is really huge, so I'm open to any ideas as to how to get this patch set reviewed and merged. This has undergone some internal QA, and will continue to do so for the remainder of this week.

The intent of this patch is to add a cache for conversion from a set step system (in this case, cursor positions) to DOM points (i.e., node + offset pairs) and back. Usage of this cache is vastly quicker to the previous implementation of walking from root every time a particular cursor step needed to be found.

The current cache uses a fairly rudimentary system for detecting cache points. The performance of this might potentially be improved in future by changing the datastructure (e.g., balanced binary trees), but for now the performance is adequate.

This patch can be broken down into a few relatively distinct sets:
start - Cleanup and extracting some interfaces to start optimization
d6f3267 - Usability improvements to the extracted step translation interface. This eliminates some common bugs and errors made by consumers of the existing code
17d231b - Implement a caching version of the step translation interface.
fe25d41 - Start swapping over code paths to use the new step translation interface