Add the ability to add peers to a piece in the BlockDirectory for a swarm.
A Swarm now supports processing HaveMessages
Swarm can now handle BitfieldMessages
Block Directory can now repot available and unavailable (for download) pieces.  It can also have a peer removed from all pieces.
Block directory now has blocks inside pieces.
Made blocks markable as finished.  A piece being finished is now contingent on whether its blocks are finished.
The TorrentIO class now creates the file it will be reading and writing from when it is constructed.
The BlockDirectory can now get the incomplete pieces or incomplete blocks a particular peer can provide.
The Peer class can now generate request messages for the Peer based on what the Peer has reported regarding the pieces it has.
A Peer can now determine whether it is interesting.
Persists the bitfield for a block directory to disk and reads it back up on creation.  This file has a .bitfield extension and is placed next to the .part file which pieces are being downloaded into.  Some additional helper test files have been added, and it is now easier to create a BitfieldMessage.  A BitfieldMessage is in fact the object which is marshalled and unmarshalled for persisting bit direcotry state.
Completion of blocks is now based on received PieceMessages, not block indexes which were to anyone outside the BlockDirectory class.
Cleaned up determination of complete pieces and blocks.  Provided access to blocks independent of pieces.  Added a to_s method for BitfieldMessages.  Added a to_s method to the BlockDirectory class for rudimentary progress tracking.
Swarm can now handle PieceMessages.
Improved the Bitfield and Have message tests for the Swarm class.  They now actually verify that handing the messages does the right thing.  No bugs were found due to the previously lax testing.
Added a couple comments around the @bitfield member of the BlockDirectory class.