Using IAsyncResult WaitHandle to time out send/receive; offering new timeout parameter in constructors