Load the private key only once.
Combine AsioRepeatedEvent and TreeSigningEvent.
Change approach: make a generic class, but keep it internal.

In other words, hide my shame.