0.4.0
Minor refactoring and adding of comments

The rebroadcast and error logic was poped out and reused.

The peer / connect logic was also poped into functions to make reading
easier.

Comments were added so I remember why I did what I did months from now.
Made rebroadcast and error methods on self

rebroadcast and error were shifted to methods on self so that child
objects could reimplement them with new logic.
fixing boxing
Fixing a message dereferencing bug