Implemented better handling of IO errors

BlockManager now throws exceptions via the RaisedException event
BlockManager attempts to create a stream up to 5 times if unsuccessful
TorrentManager stops transfer if an IOException is raised by the
BlockManager in the current mode