Proof of Storage

`BuildStorageProof()` is now implemented, allowing participants to construct storage proofs which can be verified by `VerifyStorageProof()`. `buildMerkleRoot()` was also replaced with `foldHashes()`, since `buildMerkleRoot()` failed to terminate during testing. As an added bonus, `foldHashes()` is written such that `proofStack` no longer needs to be checked for sufficient length.