Got rid of MemoryListener, instead replacing it with a closely tied pair
of "fake socket" and "fake connection", where the connection wraps
around the undrlying SSH channel. This allows me:
- Know exactly when connection.Close() is called (no wait for in-memory pipes)
- Keep the original remote addr around
Most of the changes are in api_with_roles.go