Make navigation overridable

This is the beginning of changes that will make it easier for apps to override the default navigation modes.

This already makes it theoretically possible, though it might not be easy, and I haven't actually tried it from an app.  I have tested to make sure that it doesn't break the current functionality, though.