refactor(frontends/lean/scanner): remove dependency to seekg and unget
methods

It is not safe to use seekg for textual files. Here is a fragment from a
C++ manual:

seekg() and seekp()

This pair of functions serve respectively to change the position of stream pointers get and put. Both functions are overloaded with two different prototypes:

     seekg ( pos_type position );
     seekp ( pos_type position );

Using this prototype the stream pointer is changed to an absolute position from the beginning of the file. The type required is the same as that returned by functions tellg and tellp.

      seekg ( off_type offset, seekdir direction );
      seekp ( off_type offset, seekdir direction );

Using this prototype, an offset from a concrete point determined by
parameter direction can be specified. It can be:

          ios::beg	offset specified from the beginning of the stream
          ios::cur	offset specified from the current position of the stream pointer
          ios::end	offset specified from the end of the stream

The values of both stream pointers get and put are counted in different
ways for text files than for binary files, since in text mode files some
modifications to the appearance of some special characters can
occur. For that reason it is advisable to use only the first prototype
of seekg and seekp with files opened in text mode and always use
non-modified values returned by tellg or tellp. With binary files, you
can freely use all the implementations for these functions. They should
not have any unexpected behavior.
fix(frontends/lean/pp): protect pretty printer from exceptions
fix(frontends/lean/info_manager): make sure env_info is not lost when
starting parser in the middle of the 'file'
fix(frontends/lean/info_manager): get_closest_env_opts
refactor(library): remove unnecessary file hott_kernel, HoTT and
standard library have been merged
feat(shell): include build type when printing version
refactor(library): remove dead code
refactor(kernel): remove support for proof irrelevant classes

Motivation: we can use Prop
refactor(util/thread_script_state): remove 'enable_script_state_recycling' hack
fix(shell/lean.cpp): use binary mode to open cache file
fix(emacs/lean-flycheck): support windows

In windows, we need to first call python interpreter to call linja.
fix(emacs/lean-tags): support windows
fix(bin/linja): support windows

':' has a special meaning in build.ninja and has to be escaped. In
windows, ':' is used for drive names (i.e. c:).