Get single-participant bootstrapping working

There are some pretty big changes. I changed the siacrypto functions to remove 'SignedMessage' as a struct. Instead you just get back a signature, and are expected to have the original message. When passing stuff around on the wire, the signature should always come first, followed by the message. I don't think it'll cause bugs if you don't do it this way, but best to be consistent with the nacl libraries.

The test suite is slightly more comprehensive than before.

Port numbers have been more carefully assigned, they can still interfere with each other if there are errors (such as no internet connectivity).

I haven't picked all the numbers, but the 9000's are reserved for actual use, the 10,000's are reserved for testing the network package, the 11,000's reserved for the consensus package. Each file should pick a range, so it doesn't step on the toes of the other files. I don't have a perfect solution for that, but the ranges should jump by 25 (25 ports should be enough for a whole file of testing, but if it's not it can just consume 2 ranges). This also gives a total of 40 testing files per package, which should also be enough. If it's not the testing package can get another range of 1000 ports. Current implementation gives files their own range of 100, but whatevs

I think the most significant changes are to the bootstrapping process and the consensus process. The consensus process is more strict about what updates it considers (it's now secure), and the bootstrap process has been broken into a bunch of functions. The new format for bootstrapping is pretty messy, could use some polishing.

I realized that I haven't implemented block hashing yet, which means the 'strict' new consensus algorithm is effectively not any more strict at all. But it will be once block hashing is implemented.
hmm. So, the BootstrapWalletID is the id of the wallet that acts like a siacoin fountain, helping other people to create wallets for themselves. Then, the starter wallet id is whatever id that the participant wants.

So I added a field that allows the caller to pick whatever id they want for their own starting wallet, which is why it can't be ID=0.

As for setting `BootstrapWalletID`, I thought it would make sense to do it in delta because that's where the wallet gets created, and also because it's a unversal number. If we defined it in Participant, we'd need to pass it to delta via argument, or just have the participant package make the call that creates the fountain wallet.

Not sure the best approach