Fix unimplemented types; INTEGER parsing consistent.

* If GetMultiple or GetBulk returns a MIB with an Unimplemented type
  (e.g. Opaque) the whole call would return an error. It's more
  desirable to return an UnknownType so it's at least possible to read
  other values.  The UnknownType's byte number has been set to 0x00.
  Java SNMP takes the same approach.

* Minor bugfix - The RequestID was not being correctly parsed.

* Added FIXME to the RequestID.  This should be set to an atomic counter
  and the read should discard (and retry) if the sent ID does not match
  the received ID. In the current implementation it would be possible
  for a late arriving packet form a pervious (failed) request to be
  incorrectly associated with the call. This will be fixed in a future
  commit.

* Parsing of INTEGER values in parseRawField was incorrect.  It would
  returned an unsigned type if it was more than one byte.  This lead to
  issues where say a RequestID was < 256 it would return an int, while
  if it was > 256 it would return a uint. The logic in parseRaw is now
  consistent with decodeValue.

* Minor formatting as suggested by @virtuallynathan, in helper.go.
Added SNMP walk (via both GETBULK and GETNEXT)

The original 'alouca' version has a limited walk implementation. This
version's logic is more robust and is able to successfully walk large
trees across a range of different devices/agents. Flow is based off
existing walk implementations found in net-snmp and Java snmp.

TODO: To make this just as reliable as other implementations, we'll need to
add retry support at the send() layer, and ensure packet request IDs are
matched.
minor integration tweaks