fix(shell/lean.cpp): use binary mode to open cache file
feat(library/scoped_ext): allow extensions to mark whether an entry is
persistent or not
feat(frontends/lean): allow transient coercions, i.e., coercions that
are not saved in .olean files
feat(frontends/lean): allow transient classes/instances, i.e.,
classes/instances that are not saved in .olean files
feat(frontends/lean): definitions are opaque by default
feat(frontends/lean): add 'reducible' modifier for controlling which
definitions are unfolded during elaboration

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
refactor(frontends/lean): replace '[opaque]' modifier with 'opaque
definition', '[opaque]' is not a hint, but a kind of definition
refactor(frontends/lean): replace '[private]' modifier with 'private
definition' and 'private theorem', '[private]' is not a hint.
refactor(frontends/lean): replace '[protected]' modifier with 'protected definition' and 'protected theorem', '[protected]' is not a hint.

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
feat(frontends/lean): add 'irreducible' as syntax sugar for 'reducible [off]'
refactor(library/data/vector): rename 'vec' to 'vector'
doc(declarations): private, opaque, protected definitions