Controller's extend_circuit() fails to remove temporary listeners
When the extend_circuit() method is called with await_build as True it attaches a temporary event listener (add_event_listener()). It looks like we never detach this, so repeated calls will accumulate listeners. This won't result in errors, but it will impact performance if we accumulate a lot of them.
We should either...
a. detach the listener when we're done with it, even in error conditions
b. reuse the listener if one has already been attached