Don't refresh the rankings page when a selector is changed. Closes #1870
This patch teaches JS to handle selector changes purely through AJAX calls, instead of reaching out to the server for a completely new HTML base.
The implementation works by allowing a second RemoteCache to exist in the background. Changing the selectors makes that second RemoteCache, which triggers a new AJAX request to the new endpoint URL. When the request completes, the new RemoteCache gets swapped in, and the old RemoteCache gets garbage-collected.
Selection state is saved with the Web History API, allowing forward/backward navigation that does nothing but kick off more AJAX calls.