Make `compose` a notation rather than a definition

This makes life a lot easier; we don't have to be constantly unfolding it, and we can avoid `Local Arguments compose /.` and `simpl rewrite` in lots of places.
Why not `Notation compose := (fun g f x => g (f x)).` so that we can write things like `compose g`?