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.
(continuing discussion from outdated diff) No, `IsEquiv (fun x => ?f (?g x))` doesn't work.