This adds support for uuid version 4 and version 8.
Version 4 is not time dependent which makes it good for use in places where object creation times should not be leaked.
On the other hand this makes it a poor choice for places where data locality(like dabase index fields) is required.
Initially we were going to add version 7 instead of 8.
However, version 7 uses millisecond precision and I wanted more. So we implement version 8 which according to the RFC[2][3] is vendor customizable.
For our case, version 8, is just like version 7 except it uses nanosecond precision instead of millisecond.
This version is well suited where data locality is required.