Use System.nanoTime()

This is required to make code resilient to system clock adjustments.
Also it makes timeouts more precise.
Merge pull request #84 from ash2k/nanotime

Use System.nanoTime()