Working implementation of two forms of Proof of Storage

There are two proof of storage algorithms.  One is a homomorphic identification based scheme from a paper by Shacham and Waters "Compact Proofs of Retrievability", and the other is the Merkle hash scheme as described in the white paper.

The interface for heartbeat has changed significantly to reflect what probably needs to happen to support other proof of storage algorithms... there may be a way to refactor it so that it is slightly simpler, but for now this is basically straight out of a paper by Ateniese et al "Proofs of Storage from Homomorphic Identification Protocols".

Will need to expand the tests and also probably add a lot more optional functionality for both the libraries so that they are more parameterizable and so we can tweak performance in the field more easily.

Unfortunately one now requires building as it is in C++ and requires the Crypto++ library to run, for supporting big integer calculations.