Don't crash if the requested range is outside the any document root

Fixes a crash when running the benchmark.
Merge pull request #497 from peitschie/benchmark-fix

Don't crash if the requested range is outside the any document root
Force the entire step cache to be revalidated after operation tests

The step cache verification only ensures the cache is valid when step
conversion is requested. Therefore, to force the cache to recheck
after completing the test, the maximum available step is requested.
Add failing operation test showing caching issue
Move ODT-specific logic out of StepsCache into the steps translator

This is purely a refactor laying the groundwork for fixing the failing
operations tests. There are no expected functional impacts.
Update the StepsCache when restoring a bookmarked position

Whenever any iteration occurs, the cache needs to be updated so damage
can be repaired. This particular change fixes an issue where restoring
from the root bookmark ends up iterating up to the first damaged
paragraph bookmark, which should cause the paragraph bookmark to be
repaired.

This requires consumers to be able to mark ALL current bookmarks as
damaged, which is now achieved by passing in "-1" as the inflection
step to the damageCacheAfter(…) call.

Fixing this bug has exposed another existing issue that potentially
re-orders bookmarks that share the same step. This uncovered problem
will be addressed in a subsequent commit.

Fixes issue #503
Add StepCache support for multiple bookmarks with the same step number

It is valid for multiple bookmarks to share the same step number if
the user of the steps cache does not have a perfectly granular position
filter.

For example, paragraphs within a tracked changes block are not valid
steps according to the TextPositionFilter. This means all these
paragraphs stack up on the same step.

TODO unit test