Fix several problems with BananaphoneTransport

I got help from Leif and George... Codec encoder states
are now stored in an encoder factory. Model building is
done seperately from initializing encoder coroutine state.
Coroutine encoder states are no longer reused for multiple
bananaphone transports on the same obfsproxy running in managed mode.

Bananaphone codec taken from upstream in Leif's new branch:
https://github.com/leif/bananaphone/tree/encoder-factory

George added is_managed_mode to TransportConfig which
is needed by setup() to determine where the transport options
are retrieved from. Transport options are retrieved from three
sources depending on how obfsproxy is called:
- commandline args (external cli mode)
- ptlib environment variables (server managed mode)
- socks args (client managed mode)

Note that building the bananaphone transport model is expensive.
Therefore we would like to not build the model at TCP connect because
it would create an added delay to the client connect time.
However an obfsproxy managed client will not be able to use
the transport setup() method to build the model at program start
because it receives the transport options from handle_socks_args()
method at connect time. This means that obfsproxy managed clients
will have a model build time delay added to connect time.

One partial solution we may implement in the future is a memoization
of models so that after the initial model is built future models come
from cache.