Made glfw window creation use a proper builder pattern

The main reason I changed this stuff yet again is that I tried to actually used it, and found it to be too restricted in practice. ;)

Specifically, with the previous `create_default_window()` it was impossible to add additional window hints to glfw, like for example making the window re-sizable.

With the new design, you can specify common window hints that should be applied regardless of which setup lead to an window creation, and you can also add custom fallbacks before and after the provided shortcut function.
Yeah, because the builder API provides default values, I just omitted them here to make the example less complex. Without them it defaults to a `640x480` window. (I left the title because I found it funny though :P)

I can change it to either use more default values, or be more explicit if you want to.