Bug 72773: store and navigate multiple edit history locations

This expands existing "last edit location" navigation to now store an ordered queue of multiple last edit locations.
The size of the list is configurable (currently set at 15).  Once the list is filled, each new location insertion evicts the oldest location to make room for the new.  Thus only the last 15 edit locations are ever stored.

To avoid wasting list space on multiple similar locations in close proximity to each other, similar edit locations (as determined by a parameterized proximity function) are merged to a single location.

Ctrl+Q key mapping still navigates to the last edit location same as before.  However, now continuing to hold ctrl and then pressing Q again begins the traversal thru history of prior edit locations.  Once traversal stops, future Ctrl+Q actions are now temporarily anchored to this older historical location.

M3+Ctrl+Q conversely moves the anchor forward thru edit history, so after traversing backward with Ctrl+Q, you can go forward again by repeatedly pressing Alt/Opt+Ctrl+Q.

New edit locations are always inserted at the end of the queue, so that insertion order is always maintained.  Insertion of a new edit location also resets the last location "anchor" back to the most recent edit, so that pressing Ctrl+Q once again brings you to the most recent edit rather than a historical one.

Change-Id: I885e209b9d9300f8e6226e6cdf64616751ead944
21 files changed