feat(frontends/lean): add [whnf] modifier to eval command
refactor(library/logic/cast): move heq declaration to a separate module

heq is be needed for some automatically generated constructions.
So, we want it available with the least number of dependencies.
refactor(library/data/prod): break into pieces to reduce dependencies

prod is needed for some automatically generated constructions.
So, it is important it is loaded in the environment as early as possible.
feat(library/defitional): add no_confusion_type construction for inductive datatypes that are not propositions
feat(library/defitional): add no_confusion construction for inductive datatypes that are not propositions
refactor(library/data/sum): use `no_confusion` construction to simplify proofs
refactor(library/data/nat/basic): use `no_confusion` construction to simplify proofs
feat(library/algebra/order): begin theory of orders

feat(library/algebra/order): begin theory of orders
feat(library/hott/trunc): prove that n-types are (n+1)-types.
feat(hott/trunc): clean up some theorems, prove some basic theorems
refactor(typeof): move typeof to general_notation
doc(algebra): update markdown files
style(library): rename set_category to discrete_category
style(library): add some comments
feat(empty): define negation of types
feat(library): port more of truncation library from Coq HoTT

Everything directly about truncations in the basic truncation library is ported.
Some theorems about other structures still need to be ported.
Also made some minor changes in hott.equiv
fix(lean-util): handle case where incomplete hierarchical name ends with "."

Close #311