Multiplexer refactoring & fix-up

- Created common multiplexer base class. Signal now depends upon the base class,
  not the multi-threaded multiplexer.
- Clarified conditions for synchronicity when attaching & detaching signals,
  setting a signal's timer, and terminating the multiplexer.
- Multiplexer now detaches all signals before termination completes.
- Multiplexer now detaches all signals if a nonrecoverable error occurs.
- Added mux::wait() function to synchronize on a multiplexer's termination.
- Moved multiplexer's Ready Queue, Timeout Queue, and Garbage Collection Queue
  operations into separate functions. This should make it easier to optimize
  these operations later.
- There is now one Garbage Collection Queue shared by all multiplexer threads.
- Shortened lots of names: shared_mux -> mmux, unique_mux -> smux, mux_signal ->
  signal, and various member variables.
- Clarified signal terminology: "close" -> "detach".
- Clarified multiplexer shutdown terminology: "cancel" -> "terminate".
- Improved Doxygen commentary for the multiplexer and signal.