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.
Could we maybe simplify this loop to something like this?  CAS concurrency is hard to think about!

```
while (true) {
  last = lastTimestamp.get();
  timestamp = System.currentTimeMillis();
  if (timestamp < last) {
      // Clock shifted backwards: don't increment here, since that risks running away, but it does mean we risk exhausting sequence ids for
      // a long backwards clock shift:
      timestamp = last;
      break;
  } else if (timestamp == last) {
      break;
  } else if (lastTimestamp.compareAndSet(last, timestamp)) {
      break;
  }
}
```