Change behavior of exit() and abort()

This pull request changes the behavior of `exit` and `abort` the way I proposed on #20. It does not change any other thing (fprintf still doesn't print to the screen) so nothing is printed on the screen simply by calling either of the functions. However, as it is right now, it already allows for seeing any messages the program may have output to VRAM through its own means, by putting the user in a sane GetKey loop instead of crashing the device on purpose.

This behavior was initially suggested by ComputerNerd, who also alerted me to the... peculiar behavior of `exit`.

I know my solution is not fully accepted by the contributors to this project, and thus I don't expect this pull request to be accepted right away. This is more to provide a basis on which to discuss this specific approach to fixing the behavior of `exit`, so please use the issue #20 to discuss the actual behavior, whether it should be changed and to what, and keep this pull request to discuss this specific approach and possible ways to improve it. In the event that my proposal is accepted, even with some modifications, this pull request could be accepted, otherwise I'd close it.
Of course, the idea is that these preprocessor defines are to go away, and the code that will be left will depend on which direction the discussion about the behavior of fprintf goes.