implemented Clone trait for Surface

In this implementation, clone() does deep copy of surface, resulting in independent duplicated pixel data. Alternatively, it could be done using refcounting (SDL already supports that), but it would be counterintuitive when blitting on the copied surface, or using copy-on-write, but this would be much harder to implement.