Adds reserve-with-nano-timeout command.

reserve-with-nano-timeout will act the same as reserve-with-timeout,
except that the timeout number specifies nanoseconds.

This is split in two commits: one to refactor the existing timeout infrastructure and one to add the new feature. 

(with thanks to Yves Senn (@senny) for the Pair Programming)