Implementing a generic Tree Data Structure in C#