feat(quantifiers.lean): change exists_unique to a constructively stronger formulation

the previous formulation was constructively probably to weak to be useful
feat(lean-input.el): add some new notation
feat(library): add definition of subsingleton and some other minor changes
feat(category): split category.lean in different files; add more constructions and theorems about isos
feat(binary.lean): add helper theorem for associative functions
feat(algebra/category/): minor additions, start on adjunction
fix(library/algebra/category): minor fixes to reflect recent changes, and fix tests