refactor(library/logic/cast): define heq using inductive datatypes

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
fix(frontends/lean): universe levels associated with section variables should not be fixed in the section
fix(frontends/lean): avoid superfluous local references of the form `@-1 (@ f)`,

This kind of term also confuses the elaborator
test(tests/lean/run): add additional tests for section parameter/variable and strict implicit argument
fix(frontends/lean/proof_qed_elaborator): information about synthesized variables in a proof-qed block was being lost
chore(frontends/lean/proof_qed_elaborator): remove obsolete comment

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
chore(frontends/lean/placeholder_elaborator): indent code
fix(library/unifier): missing justification when updating choice constraints

The bug was not producing incorrect results, but really bad error
messages.
See: empty.lean.expected.out
refactor(library/data/bool): use new style
refactor(logic/core/eq): use sections
refactor(library/logic): remove 'core' subdirectory
chore(library/logic): fix comments
refactor(data/nat/order): use new policy for marking implicit arguments and '!' operator
refactor(data/int/order): use '!' operator
refactor(data/nat/sub): use new policy for marking implicit arguments and '!' operator
refactor(data/list): use '!' operator, and new name convention for declaration names
refactor(data/sum): use sections
feat(emacs/lean-input): add shortcuts for subscripts
refactor(library/data/prod): cleanup
refactor(library/data/num): cleanup