Remove the PITS code.

The code was not functioning properly and I don't even remember how it
worked anymore.

I will leave the spec file around in case a poor soul encounters it
and decides to build it properly.
Add some more flags to TransportConfig.

Specifically a flag to tell us whether we are in external/managed
mode, and a flag to tell us whether we are client or server. These
will be useful so that transports can configure themselves during
setup().
Don't pass TransportConfig to the transport __init__().

Passing it to setup() is enough. Transports that need it on __init__()
can keep it on their state.
Import the ScrambleSuit transport protocol.

ScrambleSuit implements a superset of the obfs3 protocol.  Its original
repository is available here:
<https://gitweb.torproject.org/user/phw/scramblesuit.git>
The project web site is available here:
<http://www.cs.kau.se/philwint/scramblesuit/>
Add ScrambleSuit's ChangeLog and specification.
Add "pyyaml" because it is used by ScrambleSuit.
Add an integration test for ScrambleSuit.
Update ChangeLog with ScrambleSuit.
Do the release ritual for obfsproxy-0.2.5.
Remove gmpy from the requirements of setup.py.
Do the release ritual for obfsproxy-0.2.6.
Improve the error message if we can't set up a listener.
Also support gmpy2 for doing modular exponentiation.

There is no performance difference between gmpy1 and gmpy2 for obfsproxy, but according to the gmpy authors "gmpy2 is now the recommended version, especially if you use the pre-compiled versions for Windows.".
Use twisted.internet.threads.deferToThread in the obfs3 handshake.

This cuts the amount of time that is spent doing UniformDH related work in the
context of the main event loop in half.  It is impossible to eliminate it
entirely as the client and server both send the public keys immediately on
connection when doing an obfs3 handshake.

Notable changes:
 * self.dh.get_secret() is processed in a Twisted worker thread.
 * Another state is added as part of the handshake process for when the thread
   is running.
 * At each step of the handshake process, if there is data remaining unprocessed
   the next stage is direcly invoked at the tail of each routine.
   * After the handshake is done, if data is pending, self._scan_for_magic()
     is called.
   * After the magic is found, if data is pending, we relay the remaining data
     immediately.
Merge branch 'yawning_gmpy2'

Conflicts:
	ChangeLog
Add a __init__.py in the transport-specific unittest directory.
Import Philipp's scramblesuit unittests.
Slightly edit scramblesuit unittests so that they run in obfsproxy.
Add UniformDH unit tests

 * Test against test vectors
 * Do 1000 generate/exchanges and validate the keys.  Also acts as a quick and
   dirty benchmark (run with the Twisted trial to actually log).

This required changing the UniformDH ctor to allow the user to specify the
private key at run time.  If a key that is not 192 bits is specified, it will
raise a ValueError, but no one should use that feature apart from the test code.

The key generation was also modified to no longer leak which public key is
chosen via timing information.
Use SOCKS5 instead of SOCKS4

A straight forward SOCKS5 server implementation with the following caveats:

 * It is tightly coupled with the obfsproxy channel/GenericNetworkProtocol code
 * It's idea of RFC1929 is the ugly hack in pt-spec.txt
 * Only supports CONNECT
 * Only supports IPv4/IPv6 addresses, because DNS leaks make me sad