Added `proxybase.py`, an LDAP proxy that is easier to hook into.

Overriding `handleBeforeForwardRequest()` allows you to inspect/alter requests
going to the proxied server.
Overriding `handleProxiedResponse()` allows you to inspect/alter responses
going to the requesting client.

The CONTRIBUTING doc was a little light on details, so please bear with me if I am breaking conventions, guidelines, etc.  

I had a hard time figuring out how you might go about using ldaptor.protocols.ldap.proxy to build an LDAP proxy server without reusing some of the private (leading underscore) methods.  I rewrote parts of the code to make it seem a bit more straightforward to me, with specific methods to hook into for inspecting/modifying requests and responses.

This is ont quite the form from the linked article.  You shouldn’t say what you do but what *happens* and particularily what you write your assertions against.  E.g. "When searching against a server, a list of `LDAPSearchResultEntry` is returned."