I think this method and `singularize()` need to be optimized.

Using a big regex to check uninflected and irregular is just too much. It can be done much faster using a simple hash array.

Note that some `$uninflected` rules are regex. They should be separated from non-regex.

Shouldn't `irregular` rules be the same for both plural and singular rules?

Also, merging `static::$plural['uninflected']` and `static::$uninflected` every time is not good.