Understanding and Implementing Prototype Pattern in C# – Implementing ICloneable Interface and understanding Shallow and Deep Copy