Fix netsnmpagent.py's docstring (forgot a word)
Explicitly advertise simple_agent.py's support for state dumping with SIGHUP

Sending simple_agent.py a SIGHUP signal causes its current variable state to
be dumped again. This is worth a more explicit advertising at agent startup.
Add support for catching netsnmpAgentException in example agents

Up to now netsnmpAgent objects were created and their start() methods called
without any error handling. But an upcoming change will introduce a new
netsnmpAgentException that will be raised for error conditions, so the
example agents need to know about them.
Support detecting connection establishment/failure

So far we just relied on net-snmp resp. its init_snmp() function to establish
the AgentX connection to the master snmpd instance and neither knew nor cared
about whether a connection could be established at all. A mistake in the
"MasterSocket" option would only cause a warning on stderr, emitted by net-snmp
itself, only. Likewise, indication of a successful connection was through log
messages on stderr only, too.

This change introduces support for explicit detection of connection
establishment and failure. To this end, the netsnmpAgent class' internal
"_started" flag was replaced with a "_status" property that can take on the
values defined in the new "netsnmpAgentStatus" enumeration. Your code should
however NOT access this property -- just make sure to catch the new
netsnmpAgentExceptions (implemented in the example agents in cd4ee23b).

The change is quite large due to the fact that net-snmp itself in neither the
5.4.x nor 5.7.x versions actually returns status information: init_snmp() is
defined as "void", lending due to the fact that it will actually trigger a
sequence of function calls including callback functions that return "void"
themselves. Unfortunately there is also no dedicated callback mechanism for
client code such as python-netsnmpagent that gets called on connection
status changes. So we had to invent it on our own, using two callback
functions as more or less ugly workarounds: a custom log handler and, for
net-snmp 5.4.x support, another callback function that abuses a callback
hook originally intended for different purposes. See the sources for details,
they are well commented.

In this version, our custom log handler writes all log messages it receives
to stderr, resembling previous behavior with the difference that we also log
a message's priority level as defined by net-snmp, eg. "[Info] Foo.".
Add support for custom log handlers

Change b68a9775 implemented detection of connection establishment and failure
by accessing the log messages net-snmp generates. Log messages were still
printed to stderr.

This change allows agents using python-netsnmpagent to define their own
custom log handler function by setting the new "LogHandler" property when
creating the "netsnmpAgent" object. The function will then be called whenever
the net-snmp code generates a log message with two parameters:
1. a string describing the message's priority
2. the text of the message itself

If "LogHandler" is None, error message will continue to be printed to stderr,
as can be seen in simple_agent.py. Whereas threading_agent.py, being a step
towards a more real-life agent, has been updated to use a custom "LogHandler"
to integrate net-snmp messages in its output more nicely.

In your own agents, you will instead most likely define a custom log handler
to write the messages to your agent's logfile.