Add garbage collection.

Adds mark'n'sweep garbage collector which is partially based on
reference counting. (Handles.)

Currently doesn't use any memory pools, but instead calls `malloc()` a
lot. This can be fixed later.

Tested excessively with Valgrind and gdb and at this state, everything
works without leaks or segfaults.