Refactoring for #1 & #34

This is the same as #38, but against 3.0 branch.

As discussed in #1 & #34, this is a rough implementation of the discussed changes:

Extract new factory methods to work with GUID's
Extract classes for PRNG
Extract string/encoding decoding into "Codec" classes (one default impl, one Guid impl)
Remove final keyword on Uuid class
Extract 32-bit related exception throwing into subclass of Uuid
Extract UuidFactory class, and extract all factory methods to that class (static factory methods are kept on Uuid class but simply delegate the call to a UuidFactory)
Remove @covers from Uuid tests (to get more accurate coverage via XDebug)
Remove tests covering internal Uuid methods
Add some unit tests for new classes
Absolutely not.