Deep copying data from class instances - C#