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.
Why not try every opengl version in turn? 4.4, 4.3, 4.2, 4.1, 3.2, 3.1 (all core), 3.0, 2.1, 2.0.