Timespec refactor (again)

A simpler, gentler take on what was previously discussed in #42 and #43.

 - Everything is handled in ms, with a timespec_from_ms function providing last-minute conversion to timespecs for use in pselect.
 - A MillisecondTimer class is provided which handles the total_timeout functionality in read and write. Its set/remaining is in millis, but internally it stores the expiry point as a timespec for maximal resolution.
 - No funky math or operations on timespecs.