Implemented retry support

UDP is connectionless and retry needs to be implemented in code. This
retry logic is similar to what you'll see in net-snmp and Snmp4J.
Increased read buffer size

We don't have correct read buffer handling. If a packet length exceeds
our read buffer, we'll only get a partial read and parsing will fail.
The correct logic would be to read more off the connection appending the
data.  Implementing this correctly is quite complex.  Added a FIXME, but
in the meantime we'll increase the size of the buffer to minimize risk.
Seed our random number

* Go's rand library seems a bit brain dead in this regard!
Added test to validate API consistency
Added generic end-to-end integration test + bugfix

* The generic e2e test should work against any standard SNMP MIB-2 host.
* The e2e test found a bug in the retry code. Connection refused errors
  were being incorrectly override as a timeout style error.
Documented new tests in README
Ensure generic e2e test works on Widnows too