Added debug.register test command

Intended to test the DHT features somewhat. Currently branched and put
on hold until address resolving is implemented, since it causes minor
annoyances otherwise; such as packets being re-routed to the sender and
whatnot.

Candidate for merging once issue #7 is resolved.
Implemented DHT lookups and fixed queue delays

DHT requests now get fired off to the appropriate addresses (as given by
the hashing functions in P2P.Math) when a delayed action is put into the
queue. For elements with existing DHT entries, this is now properly
skipped and executed directly.

Cleaned up some of the DHT table interaction functions (eg. getAddr and
getId) as well as some of the functions in P2P.Sending as well, to allow
for a more general form without too much code duplication.

This further implements issue #4, but queue purging is still missing.
Implemented DHT queue purging on lookup failures

This finally resolves issue #4 properly, now by cleaning up the DHT
queue as appropriate whenever a DHT (in either table) fails.

In addition, a few issues related to DHT lookups have been cleaned up in
Parsing.hs. Furthermore, a slight issue concerning drop replies for
routing failures has been adjusted and the associated code in
Processing.hs cleaned up.
Added QUIT section

This section is used to directly signal that a peer will be dropping out
from the network, in order to have other peers forget about them
(similar to the rest of a address routing failure) as well as clearing
the associated AES keys from their caches.

In addition, some of the helper functions in P2P.hs and Sending.hs have
been cleaned up, reordered or relabelled slightly.
Reworked PANIC/PEER to allow for dial-in

This adds the basic framework for remote network reflection, allowing
using an Approx REQUEST to get a handy collection of (Host, Port, Addr)
tuples used for the initial connections. The Address fields are only
given so the bootstrapper can calculate and assign an appropriately
placed address for the joining node.

This partially addresses issue #7 but does not account for near-empty
networks nor does it actually implement the bootstrapping process.
Further food for thought:

Consider transferring an ID field in PEER as well, but note that this
can dangerously allow for third-party editing unless we add signatures
generously. Alternatively, don't bother; since it's not strictly needed.

I removed the odd PEER/IDENTIFY relationship as well, which really makes
little sense in this new context.

Further minor adjustments such as code prettification or shuffling of
helper functions.
Added DIALIN and OFFER sections

This solidifies the groundwork needed for implementing dial-in
completely, currently not yet implemented correctly. This further
develops issue #7 but does not resolve it yet.

In addition, a severe bug has been fixed where a message without a
trailing | (for content-less packets) would result in a crash of that
thread.
Improved runThread semantics to use lazy IO

This fixes an issue where hIsEOF would error if the handle was closed
from our side. ‘lines’ is used to read the lines lazily instead now and
pack them into a strict ByteString for reprocessing.