The cached error code cannot be made per-thread unless it required
glfwInit (due to lack of __thread on OS X), which would be confusing and
partially defeats the purpose of it.
Beginners would use the generic error string facility instead of the
error callback and then be confused by its nondescript messages.
Storing the provided error code from within the error callback, whether
globally or per-thread, requires just a few lines of code and hands
control to the user without compromising thread safety.
Functions registered with atexit are called from the thread calling exit.
glfwTerminate should only be called from the main thread. Mistakes should be
explicit.