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.
It could, but that would make the invocation more verbose: 
```rust
.try_hints(vec![
    ...
])`
```
Seeing how the `WindowHints` are copyable anyway, the `&[]` does seem like a particular less efficient way to do it.

If you think it would be cleaner with `vec![]` anyway, I can change it.