Re-implement paragraph & document selection using step iterators

TODO
- Unit tests
- Demonstrate how rounding causes cursors to end up in incorrect roots
  (paragraph, document

Fixes #335.