Remove record type.

This will be replaced by classes and a standard-lib dictionary in the
(hopefully near) future.

It will be difficult to have a native dictionary (if we allow most
objects can be used as keys) because there’s no way to invoke a
dispatch object for op_eq from C code.

This should also be given some thought.
Allow VM to swap out run-time allocator.

This commit is not so useful on its own - it is to make some future
refactoring a bit easier.
Make object types distinct to allow struct casting.
Fix global copy-replace error.
Allocate temp strings on the heap where possible.
Remove unnecessary forward declaration.
Move vm implementation details out of header file.
Fix typo in for condition.
Add frame caching.