Middleware update, keyboard middleware and Cmd + S

This changes the semantics of middleware to improve usefulness over the entire application. Using `.core` was an anti-pattern. I have reversed the execution order by default of middleware (latest added runs first). This is different to typical middleware, so I have renamed `.use` to `.register`. This should avoid some confusion with typical connect-style middleware.

I also added the change to override `Cmd + S` and moved keyboard events to be middleware.

Closes #115.