1. The main reason for that was actually to be able to mock the connection object from the outside, to be able to track actions inside IRC class: was the expected message sent, or it was not.
2. If we want to preserve this mock-testability, I think I can add 1 more layer - the Factory, which would either create a new real connection object, or will return a mocked one. The factory would be stored in the object, instead of a stateful IRCConnection, similarly to SES class.