ValueFunction no longer relies on std::function to work.

This is a pretty major implementation change to the core functionality
of the library. It provides improvments on both the compilation and
run-time front.

The compilation time improvements over std::function are nothing short
of magical. This is probably due to an emphasis on minimal amount of
code within the template due to the far smaller feature range of the
function.

THe run-time gains are due to the fact that we no longer have to make
two hops through std::function anymore and therefor save on a virtual
function call.