Add vm_invalid_argument_count exception type.
Fix CALL/RETURN comments.
Remove unneeded write to esp from RETURN.
Handle arg < 0 / argc > esp in exec_call.

Throws vm_invalid_argument_count for either.
Add additional exception types.
Add an additional check for release_all_memblocks.

Only release a block if it's not null in the first place.
Exceptions for realloc_block.
Rewrite free_block.

- Failure cases go in conditionals.
- Throws exceptions where necessary.
Rewrite bits of get_block.

Also makes the two implementations identical.

- Using VM_MEM_NO_PERMISSIONS is now an error.
- Throw exceptions for permissions errors.
Memory access errors for PEEK/POKE/MEMMOVE.

Specifically errors for null access and bounds checks.
Stack related errors.

- Throw on accessing stack indices less than 0.
- Throw on pops when ebp == esp || esp <= 0.

If esp < 0 in the first place, something's wrong, but at least it should be
detected.