somewhat refactored::Receiver.new and added the ability to pass a block