Add time based UUIDs

See #5941.


Using SecureRandom as a UUID generator is slow and doesn't allow us
to take adavantage of some lucene optimizations around ids with common
prefixes. This commit will allow us to use a
timestamp64bit-macAddr-counter UUID. Since the macAddr may be shared
among several nodes running on the same hardware we use an xor of the
macaddr with a SecureRandom number generated on startup.
Seems strange to only expose the singleton instance to the package or child classes. Could also simplify access by exposing a class level accessor to it:

```java
public static SecureRandom getRandom() {
    return SecureRandomHolder.INSTANCE;
}
```

If it's only intended for package-level use, then perhaps a package protected class should provide it instead.