Simple Merkle Tree implementation

To be used hand-in-hand with Solidity, that's why it's using keccak256 for hashing!

Example usage

```rust use simplemerkletree::MerkleTree; let elements = (0..4) .map(|el| format!("item-string-{:}", el).into_bytes()) .collect::>>();

let tree = MerkleTree::new(elements.clone()); let a = &elements[0]; let b = &elements[1]; let c = &elements[2]; let d = &elements[3];

let ha = MerkleTree::hash(a); // Part of the proof let hb = MerkleTree::hash(b); let hc = MerkleTree::hash(c); // Part of the proof let hd = MerkleTree::hash(d); // Part of the proof let hab = MerkleTree::combinedhash(&ha, &hb); // Part of the proof let hcd = MerkleTree::combinedhash(&hc, &hd); let habcd = MerkleTree::combinedhash(&hab, &hcd);

let proof = tree.getproof(d).unwrap(); asserteq!(proof.len(), 2);

asserteq!( vec![hex::encode(hc), hex::encode(h_ab),], proof .iter() .map(|e| hex::encode(e)) .collect::>() );

let root = tree.getroot(); asserteq!(hex::encode(h_abcd), hex::encode(root)); ```