Starting work on some mode impl.

This led to another rethink, which is that fns will take zero arguments and get
all of their dependencies from the mode that defines them. This simplifies life
for everyone and I can revisit whether I want modeless fns later.

Modeless fns would mainly be useful when users are writing extensions or
customizing the behavior of an existing mode.