Changing from System.currentMillis to System.nanoTime.

The problem with using System.currentMillis is, as far as I understand,
that it may not grow in a smooth manner and not guaranteed to be greater
in the future then in the past. This could be the case for example if a
correction of the system clock is performed. System.nanoTime does not
depend on the system clock and therefore does not have this issue.
Changing timestamp field to use AtomicLongFieldUpdater.