Move to PHP5.4, fix bugs and add tests

Not ready to merge, 2 tests to fix.
Why not checking if `static::getCollator()` returns `null` ?

If you ever change the Collator class (and change the value returned by `static::getCollator()`) you will also have to change this code.

I think that this checks is the responsibility of the `static::getCollator()` function.