build: Add more aggressive compiler flags

We should be building Graphene with more aggressive optimizations, and
with enough flags to let the compiler know what we want.
Drop the GRAPHENE_BENCHMARK conditional

We cannot build Graphene with a run-time selectable backend without
building a whole vtable and paying its price.
Rework the implementation of the SIMD types

The current implementation of the SIMD types is slightly less useful
than it ought to be, and we should make it better. The main goal of this
commit is to make the SIMD vector and matrix API public and usable
outside of Graphene itself, through the judicious application of
inlining and macros.

We can inline everything inside the simd4f.h and simd4x4f.h headers, and
use compiler extensions to macroize all the platform-specific API using
a trick similar to the one used by gatomic.[ch] in GLib. Currently, this
means that we support only GCC and GCC-compatible compilers, like Clang;
supporting SunCC and MSVC would be nice, but it'll require some help
from people that have access to those compiler suites.
bench: Restructure the benchmark test suite

We want to benchmark the pure, SIMD matrix API instead of the typed
wrappers around it; by doing so, we will be able to test the different
implementations in the future, since those get inlined into the test
suite, instead of being inlined into the library.
Restore the ability to override the SIMD implementation

This allows us to have a proper benchmark suite that can go through all
the implementations available at compile time, in order to measure their
relative performance.
bench: Build the SIMD matrix test case for every implementation

And run all the available implementations.
matrix: Coding style fixes for print()
tests: Use proper formatting for the fuzzy eq message

We can reuse the assertion message API from GTest.
bench: Test projection

We should benchmark the implementation of some common methods in the
graphene_matrix_t API. We start from point projection.