Per function callbacks

* reenable per function callbacks
* add directCall to omit callbacks when calling OpenGL functions
* fix OpenGL version query
Yes, but in his approach, he moves the callback functor after copying it. Right now, you are making two copies for lvalues, one at the parameter passing, and one while pushing it into the `std::vector`. If you wanted to comply to his suggestions, you would have to move the functor into the `std::vector`:
```C++
template <typename ReturnType, typename... Arguments>
void Function<ReturnType, Arguments...>::addBeforeCallback(BeforeCallback callback)
{
    m_beforeCallbacks.push_back(std::move(callback));
}
```
By doing this, you would reduce the cost to one copy and one move for lvalues, and two moves for rvalues. Because these callbacks will usually be temporaries, it would be even better to define both a const ref and a rvalue ref function, so that rvalues would be only moved once. For the sake of simplicity, I would use the pass-by-value + move approach, though.