Update Timeout semantics to

Use None to imply "never", and to use a sentinel object for default timeouts

Addresses #251

This again has a big performance hit, so I'll defer to @br0ns for recommendations.  I assume that it's the use of sentinel objects that are looked up rather than constants