Parse Net::LDAP::PDU when calling Net::LDAP::Connection#read, instrument PDU parsing

This PR reduces the duplication by moving the PDU parsing into the `Net::LDAP::Connection#read` method and instruments PDU parsing to give more visibility into the messages being sent from the server.

Should not result in any behavior change.

I believe this is along similar lines to #116, though not exactly the same.

For what it's worth, I looked at instrumenting the `Net::LDAP::PDU.new` method from the inside but there's no reference to the `instrumentation_service` object to service the instrumentation events (and I didn't want to go the route of a global default handler). This seemed like a good balance and a needed refactoring anyway.

Done:

- [x] parse PDU in `Net::LDAP::Connection#read`
- [x] instrument `parse_pdu.net_ldap_connection` event
- [x] unit tests
- [x] cleanup/refactoring of `Net::LDAP::Connection#read` callsites

Still to do:

- [x] integration tests (optional)

Many of the `read` callsites look like this:
``` ruby
(pdu = read) or raise Net::LDAP::LdapError, "no bind result"
```

~~This should be cleaned up, and this PR is a good opportunity to do so.~~ Done.

cc @jch @schaary