Changed to map zero timeouts to `Alt.unit` so that they return
immediately.  Thanks to @buybackoff for the suggestion.  Please note
that polling should generally be avoided.

Also changed the timeout computation to round the timespan up when
converting to milliseconds used internally.  This is consistent with the
documentation of timeouts.