Eventlist, Libsodium, 1/2 Uploads

This PR has a few things in it, I'm PRing now because I want the libsodium changes merged before Josh gets up tomorrow.

1. Switched crypto libraries back to libsodium. All errors appear to have been fixed, I could not trigger the ghost bug from before. I'm pretty sure I understand what the problem was, and it has been fixed.

2. Created an eventlist. This is a skip list of events that the quorum performs each block. Events just have to fit an event interface to be added to the event list.

3. Started working on uploads, which work with the event list. Added UploadAdvancements to the heartbeats, and created an upload struct that fills the event interface, as well as has all of the required information for actual uploads. Three things are missing at this point, but will hopefully be complete tomorrow:

a. there is no clearUploads() implementation, meaning uploads will never be removed.
b. there is no completeUpload() implementation, meaning an upload is never solidified
c. there is no way for a client to upload data to a participant.

upon adding these 3 things, file allocation and uploading should be complete. This still will not include any erasure coding or implementation in the client, or any self-repairing. The quorum also won't synchronize uploads properly. So there's a fair amount of work to be done but we're nearing the end.
```encodedHeartbeatLen += len(hb.uploadAdvancements) * quorum.UploadAdvancementSize```

lol