feat(frontends/python): add python binding using SWIG
tests(python): add tests for python binding

You can add ``.py`` tests for python binding at ``tests/python/``. For instance,
we have ``tests/python/is_var.py``:

```
import lean
x = lean.mk_var(0)
print(lean.is_var(x))
```

It uses the return value of python interpreter to determine whether a
test is passed or not. In addition to that, we check whether the result
output contains "swig/python detected a memory leak of type" or not. If
so, we report a memory-leak.

Python tests have the label ``python`` which can be used by ctest:

```
ctest -L python
```
chore(frontends/python): move frontend.i to expr.i

This allows us to build a number of *.i files which will be included in
one large lean.i file.
feat(frontends/python/expr.i): add printing and hash functions to the
python interface
chore(builtin/obj): commit olean files
feat(frontend/python): create a common file for lean bindings

The file lean.i includes the actual interface files, which themselves
are copies of the .h files of the same name. The .i files are not
strictly necessary, but are convenient for small modifications or
extensions relevant to python.
feat(examples/lean): add (conditional) proof of Hurkens paradox.

Author:    Cody Roux <croux@cmu.edu>
chore(frontends/lean/parser): fix style

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>