python: various simplifications
python_MODE=python3 crashes on impls/python/tests/step5_tco.mal, but it also does on the current head.
Replace some lambda constructs with more idiomatic generator expressions, removing several temporary sequences (conversions, contatenations, slices, arguments).
Remove obsolete coll_Q test and preservation of metadata by conj.
Use normal classes for functions in order to simplify cloning and membership tests.
Close file open by 'slurp' after reading.
Derive List and Vector from tuple, which is more efficient than list for immutable structures. Remove the need for getitem stuff.
Search in outer environments with a loop instead of a recursion.
Replace most python2/3 wrappers with code compatible with both versions. Use a non-printable ASCII characters instead of Unicode characters (in order to avoid unicode in python2).
Follow Python style conventions:
- int(a/b) -> a//b or floordiv(a, b)
- obj.str() -> str(obj)
- obj.meta -> obj._meta
- f (args) -> f(args)
Remove obviously backported stuff from first steps.
Let try* benefit from TCO.
Fix the detection of special forms (strings were accepted as well as symbols).
Arguably improve readability:
- merge is_macro_call into macroexpand
- merge eval_ast into EVAL (The two 'if not types._list_Q(ast)' tests in EVAL were redundant)