Cleanup for @typedefs

The @typedefs variable was overloaded in commit 3f3b6631b6.  Prior to that
commit, the @typedefs Hash contained a mapping from the C data type to a string
that the Type class could parse to get the Ruby data type.  The 3f3b6631b6
commit added a second set of data to the hash, a mapping from a C data type
(the typedef name) to another C data type.  This resulted in strange things
coming out of the Type class when handing Structs, Unions, and Callbacks.  I
applied a few commits to Type without fully understanding the problem to get
the Struct functionality back, but it was incomplete.

For example, given this C code:
```c
/* struct with an anonymous union */
struct test_struct {
  union {
    int i;
  } data;
};
```

The following Ruby would be output (sans FIXME comment):
```ruby
class TestStructData < FFI::Union
  layout(
         :i, :int
  )
end
class TestStruct < FFI::Struct
  layout(
         :data, :test_struct_data
  )
end
```

This commit changes what the typedef code puts in @typedefs.  Instead of
putting a C-to-C mapping, we map from the C data type, to a stringified symbol
of the C datatype.  This matches what the `typedef` FFI command generates.  In
addition to this, all other typedef ruby types (those that do not start with a
colon) are processed recursively.

With this fix we get the following output for the failing code above:
```ruby
class TestStructData < FFI::Union
  layout(
         :i, :int
  )
end
class TestStruct < FFI::Struct
  layout(
         :data, TestStructData
  )
end
```

The effect of these changes is that @typedefs is once again a C-to-Ruby type
map, with Type parsing the values to generate the Ruby output.