Refactor CStruct a bit.
Refactor CStruct a bit.

- StructBase is now a module that defines member methods for structs on
  inclusion in a struct class. So, first the constants for the class
  must be defined, then StructBase is included.

- long_inspect/long_inspect= are now a class methods of CStruct, as this
  didn't really fit StructBase's role anymore.

- Memory is now the base class for all struct classes. This makes more
  sense than having a base class that could be instantiated, resulting
  in strange code.

- Member method definition of struct classes is now handled by
  StructBase::define_member_methods.

- Struct class generation is handled by CStruct::build_struct_type,
  which now acts as a secondary form of creating a struct class (though
  it doesn't call add_type like CStruct::new does).

- Array class generation is handled by CStruct::build_array_type. This
  method shouldn't be called - ever - by user code since it's already
  called by build_struct_type.

nilium/ruby-snowdata,nilium/ruby-snowdata