This is done in preparation for runtime platform selection, to make sure
every platform can build with EGL enabled.
It may be possible to add support for things like the ANGLE null
platform later.
This adds the glfwInitAllocator function for specifying a custom memory
allocator to use instead of the C runtime library.
The allocator is a struct of type GLFWallocator with fields
corresponding to malloc, realloc and free, while the internal API
corresponds to calloc, realloc and free.
Heap allocation calls are filtered before reaching the user-provided
functions, so deallocation of NULL and allocations of zero bytes are not
passed on, reallocating NULL is transformed into an allocation and
reallocating to size zero is transformed into deallocation.
The clearing of a new block to zero is performed by the internal
calloc-like function.
Closes#544.
Fixes#1628.
Closes#1947.
This makes the null platform behave more like an actual stub. More
queryable state is tracked and there is even a fake monitor with one
whole fake video mode.