Minor logic fix.
Silence aliasing warnings in function.h
Correct lambda argument type.
Changed default compiler of tests to gcc.

This is because clang currently crashes under linux when running std::async
launched futures.
Monoids operator^ now supports types that cannot be copied.
Unit tests for new future functionality.
Cleaned output of running tests a bit.