Introduce #traverse() in the Kernel API

Add a first traverse primitive to the kernel api, which uses the
cursor/register spec to define its signature. This first primitive is capable
of traversing a single hop from one source node, and filters by reltype and
direction.

This commit contains:

- A revised Cursor, no longer inheriting from IOCursor as the two perform
  different jobs.
- Register implementations needed for this first traverse primitive.
- A complete "augment" cursor that can overlay local tx state on top of another
  traverse cursor.
- A temporary implementation of a store traverse cursor which simply piggybacks
  on existing listRels and visitRel mechanisms in the cache layer.

Next steps:

- Refactor the store format into stand-alone classes, separate from the stores
- Implement a store traverse cursor that uses those format classes directly,
  bypassing the cache.
Would it be better to have Regiser.Entity.Read or even Register.(Node|Rel).Read with the explicit semantics that -1 means does not exist? More typing could be helpful for these things. Same for property keys, labels, types, etc.