Add missing NEON implementation of SIMD types

Still untested, but checked against the ARM NEON intrinsics API sheets.
Enable ARM NEON

If you feel brave enough.
Fix GCC implementation of SIMD types

Copy and paste thinko.
Fix scalar implementation of SIMD types

Simple copy and paste thinkos.
vectors: Add more conversion API

Improve the ability to convert between vector types.
vec4: Fix copy and paste typo
build: Fix sanity check for GCC vectors
build: Disable GCC vectors on ARM

According to what I managed to scrounge on the web, it seems that the
GCC vectors are buggy on older ARM architectures, and are not faster
than the scalar implementation.
rect: Normalize newly initialized rectangles

This ensures that we always have a normalized rectangle as long as we
use the public graphene_rect_t entry points.
matrix: Use more graphene_rect_t convenience

We should use the rect → point API everywhere.
rect: Document the type semantics

The graphene_rect_t allows flipping the origin using negative sizes, but
we always expect the public entry points to normalize it so that we can
assume positive sizes when operating on them.

The public API does not act like a mutator: we always implicitly operate
on a normalized copy internally.
build: Require GLib ≥ 2.40

We need g_assert_nonnull() for the test suite.
simd4f-gcc: Use more builtin operators

We can use __builtin_shuffle() to implement our shuffle functions, as
well as using the comparison operators instead of comparing decomposed
vectors.
build: Check for __builtin_shuffle()

If we have access to the GCC vector extensions then we also have access
to __builtin_shuffle(), but better safe than sorry.
docs: Update the README file