Add post-processing.

In my journey to learn how to implement #1, I had to understand framebuffer objects.
So this implements basic support for custom post-processing and includes two useless
post-processors:
        - to display everything in grayscales.
        - to morph the display with waves effects.
Run demos on the main thread.

Fix #2.
To make glfw work on mac OSX, the main must be started on the main thread.
I dont like the fact that the user has to do this himself, but using std::rt::run_on_main_thread
does not work.
Call the resize callback once the window is initialized.

This might be part of the fix for #2.
Without that, the window is black (the projection is not initialized) until it is resized for the
first time.
Misc. warning cleanup, and impl Drop for the two post-processing effects.