VM: try and recover with a kernel error from the callback heap running out
VM: "formalize" the callback_heaps object allocation using a
bump_allocator<code_block>

The advantage of doing it this way is that you can reuse the existing
each_object method to iterate all callbacks
VM: use a free_list_allocator for the callbacks, that way they can
individually be freed
VM: new primitive (callback-room) for querying the VM about memory usage

The word works exactly like (code-room) except it looks at the memory
usage in the callback heap instead of the code heap.
stack-checker.known-words: stack effect for <callback> is switched, it
should be ( word integer -- alien )
VM: new primitive free-callback which is able to free a callback
previously allocated using <callback>
alien: a test and docs for free-callback
stack-checker.alien: use free-callback as a destructor when creating
callbacks

+ tests proving it works. now in case you create temporary callbacks you
can enclose them in with-destructors and it will just work(tm).
alien,stack-checker.alien: move callback-destructor to the alien vocab

It can't be placed in stack-checker.alien because that vocab isn't
included in deployed images which lead to weird errors when the
destructors trigger.
compiler.tests.alien: wrap all callback tests in special
unit-test-with-destructor blocks, that way they dont leak memory in the
callback heap