Add header for builder.rb
Add unions/structs to the Builder class.

This required a bit of fiddling with the Builder and how it assigns
member offsets, so I'll try to go over that change here:

- MemberStackLevel -- a Struct that's defined as a level of the CStruct.
  The root level is either a struct or union, but its offset is always
  zero. Level members may be either member info objects or descendant
  member levels. Descendant member levels are used in processing after
  members are declared. The order of members in a level is important for
  struct levels, though not unions, which is probably obvious.

- After members are declared, the Builder calls adjust_level, which goes
  through all of a level's members and sets their offsets. Offsets at
  declaration are more or less not set, except to determine some initial
  and alignment attributes of levels. While it's iterating, it sets the
  size of each level based the difference of its base offset and ending
  offset. For unions, this is the maximum of differences and for structs
  it's just the last difference.

  When setting the offsets of members, it's important to keep in mind
  that the first member of a level and the level itself _may_ have
  differing alignments. This is almost always fine as long as the level
  has a greater than or equal alignment than its first member. If any
  member has a larger alignment than the level, those members may have
  padding bytes inserted before them, and those padding bytes may be
  used for other members with lesser alignments.

  In general, it's not advisable to manually set a level's alignment,
  though it can be done by passing a non-nil align: keyword argument to
  a level method (either union, struct, or __do_level__ if you're not
  thinking straight). By default, a level's alignment is the max of all
  the level's alignments, and this is often the best option for that
  level.
Add struct/union class methods to CStruct.

Also shrinks CStruct.new to try to reduce code repetition.
Documentation for __build_struct__, __define_struct__, union, and struct
Fix type_size determination.

This broke with the addition of unions, since the last member may not
have had the largest ending offset of the struct on a whole. So, the
solution?

Take an array of all the ending offsets and grab its max.
Add offsets to encoding strings.

This is the closest possible way I can think of to encode the addition
of unions, and since unions are just shared offsets, it works.

Offsets are now declared at the end of a member declaration with an
@integer bit, so "foo:float@8" is a 12-byte struct with 8 unused bytes.
Space out logical negation.
Replace #intern with #to_sym.

Discussed this on IRC with some folks, but the general consensus is that
to_sym is more obvious than intern in its function (they're the same,
FYI). intern suffers from being named after a C API function (rb_intern)
which means it makes more sense in code to me, but may not be as clear
to others.
Add examples for CStruct.struct/union
Remove nodoc tags from Builder comments.

This was messing up doc generation for the entire class, so I'm going
without them for now. Just use common sense with this, since much of
Builder is considered internal.
Version 1.3.0

- Offsets may now be specified in encoding strings via an '@int'
  attribute at the end of the member decl. So, for example, 'foo:f@8' is
  a float named foo at offset 8.

- Added struct/union methods to Builder and struct/union class methods
  to CStruct. This is handled by providing overlapping offsets for
  members. I recommend reading the documentation for CStruct::Builder
  and Builder#union/struct for a few notes on alignment as well.