Add garbage collection.

Adds generational 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.