Polymorphic Data Structures in C