Support document access strategy failover

Detect when scanning with the selected document access strategy fails,
and try to fall back to other strategies.

(This will allow using the Dummy strategy when d-t-m fails for some reason.)

Also, fix TextPosition strategy to avoid crashing without d-t-m.
Secondly, if the access strategy is not in this list it's going to return -1 which will reset the last item in the list.

eg.

```
list = [1,2,3,4]
list[-1..-1] = null
list #=> [1,2,3,null]
```