Fleshed out support for child loop keep-alive

It sort of worked before, but after the first death of a child loop, it
would become detached from its parent. Also, if a parent loop died, its
children with keep-alive set would live on.

Now child loops always retain their parents, and will stay alive as long
as the parent loop is alive. However, if their parent loop dies, they
will die along with it.

There is also a new `deaths` attribute on `Loop` instances to track the
number of times that a `Loop` has died. It proved useful for testing and
it will likely be useful for debugging as well.
A test for `DieselZMQService` durability

It currently fails. This is because the `_receive_incoming_messages`
child loop can die and doesn't come back. When it dies, the service
continues to run but in a zombie-like undead state where it no longer
received incoming messages.

This change also extends `DieselZMQService` to make it more testable.
The changes include an overridable `should_run` flag and the addition of
a reference to the `_receive_incoming_messages` `Loop` on a
`DieselZMQService` instance
Improve the durability of `DieselZMQService`

The `_receive_incoming_messages` `Loop` is now run with
`keep_alive = True`. If the loop breaks for any reason other that the
parent `_handle_all_inbound_and_outbound_traffic` loop dying, it will
be restarted and won't hang services built upon it.

This integration test for incoming message keep alive now passes as
well.
Cleaned up test_zmq_service.py a bit

Removed some unused code, put the actual test at the top and added some
comments and docstrings.
Merge pull request #54 from dowski/zmq-service-durability

ZMQ Service Durability