refactor(library/data/unit): break unit.lean into smaller pieces

The unit datatype is used by automation.

We want to be able to access its declaration without having to access
all dependencies (e.g., decidable, subsingleton, inhabited, ...).

This is *not* an optimization, but a way to make sure we can "import" unit
before we import other declarations.
fix(library/definitional): make sure argument is an inductive datatype
chore(library/definitional): remove dead code
feat(library/definitional/cases_on): automatically add 'cases_on'
feat(library/definitional/cases_on): automatically add 'cases_on'