use a hashmap to represent linear combination
this MR removes the LinearCombinationElement and changes Shard.linear_combination to be a HashMap<u32, E::ScalarField> instead of a Vec<LinearCombinationElement<E>>.
- the u32key is the index of the shard used in the linear combination
- the E::ScalarFieldvalue is the corresponding coefficient in the linear combination
the main goal is to remove duplicates on the shard indices, see this test where the shard 0 is twice 
i had to
- implement CanonicalSerialize,CanonicalDeserializeandValidforShardaccording to the Arkworks documentation (scroll a bit to "implement these traits manually")
- add a test for the serialization
- fix all the usages in lib.rsandmain.rs
in the end, it's not too bad, i wanted to have your input on this @j.detchart 
Edited  by STEVAN Antoine