Add Merge Sort.

I think you can get rid of a few allocations by taking a slice as input:

    fn merge_sort<E: PartialOrd + Clone>(vec: &[E]) -> Vec<E> {

this avoids a couple of to_vec() when you call the function recursively