Rename LONG_NAMES to TYPE_ALIASES.

More fitting name since that's what LONG_NAMES actually is.
Adjust intern call to after name check.
Make sure that any added struct type is a subclass of Memory.

This is pretty important, since all struct instances are expected to be
Memory objects at some point down the chain.
Add aliased type deduction method, real_type_of.

Just iterates over type aliases until it can't.
Add real_type_of call to decode_member_info.
Add CStruct::Builder class.

This just acts as a way of building member info arrays by calling
methods rather than building the arrays yourself or providing an
encoding string. It's arguably easier to extend in the future than the
encoding string stuff, and you'll get errors if you do something wrong.

Future member declaration arguments will be added as keyword arguments,
similar to the align keyword, thereby ensuring it's explicit and obvious
what that part of the declaration does.
Add note about type aliases to StructMemberInfo description.
Require c_struct/builder in c_struct.
Add calls to flush_type_methods! where appropriate.

This is only really useful on initialization, when a new alias is added,
or when a new type is added.
Remove name requirement for add_type.

It now uses the class name if no name is provided. Should prevent symbol
repetition in code.
fixup! Remove name requirement for add_type.
Add block option to CStruct.new

This makes the encoding string optional, and will result in raising an
ArgumentError if you provide both a block and an encoding string. If
you provide a block and a string argument, the string argument is used
as the class name under CStruct.
Update documentation for CStruct.new
Re-word alias_type error, give it the ArgumentError type.
Return self from flush_type_methods!
Builder.new documentation.
Builder#member_info documentation.
Builder.flush_type_methods! documentation.
Replace size with type_size in build_struct_type.

I think the new name is more appropriate since 'size' felt like too
general a name.
Fix use of unqualified CStruct name.