Implement oneof support

Starting a Pull Request to fix #162, but a few things still need to be resolved:
- [x] Need to finalize the exact casing and syntax for the union field selector enumeration:
Currently, the following test.proto:
```protobuf
package foo;
message TestMessOneof {
  oneof test_oneof {
    int32 test_int32 = 1;
    sint32 test_sint32 = 2;
    sfixed32 test_sfixed32 = 3;
    int64 test_int64 = 4;
    sint64 test_sint64 = 5;
    sfixed64 test_sfixed64 = 6;
    uint32 test_uint32 = 7;
    fixed32 test_fixed32 = 8;
    uint64 test_uint64 = 9;
    fixed64 test_fixed64 = 10;
    float test_float = 11;
    double test_double = 12;
    bool test_boolean = 13;
    TestEnumSmall test_enum_small = 14;
    TestEnum test_enum = 15;
    string test_string = 16;
    bytes test_bytes = 17;
    SubMess test_message = 18;
  }
  optional int32 opt_int = 19;
}
```

generates the following test.pb-c.h:
```c
typedef enum {
  FOO__TEST_MESS_ONEOF__TEST_ONEOF__NOT_SET = 0,
  FOO__TEST_MESS_ONEOF__TEST_ONEOF_TEST_INT32 = 1,
  FOO__TEST_MESS_ONEOF__TEST_ONEOF_TEST_SINT32 = 2,
  FOO__TEST_MESS_ONEOF__TEST_ONEOF_TEST_SFIXED32 = 3,
  FOO__TEST_MESS_ONEOF__TEST_ONEOF_TEST_INT64 = 4,
  FOO__TEST_MESS_ONEOF__TEST_ONEOF_TEST_SINT64 = 5,
  FOO__TEST_MESS_ONEOF__TEST_ONEOF_TEST_SFIXED64 = 6,
  FOO__TEST_MESS_ONEOF__TEST_ONEOF_TEST_UINT32 = 7,
  FOO__TEST_MESS_ONEOF__TEST_ONEOF_TEST_FIXED32 = 8,
  FOO__TEST_MESS_ONEOF__TEST_ONEOF_TEST_UINT64 = 9,
  FOO__TEST_MESS_ONEOF__TEST_ONEOF_TEST_FIXED64 = 10,
  FOO__TEST_MESS_ONEOF__TEST_ONEOF_TEST_FLOAT = 11,
  FOO__TEST_MESS_ONEOF__TEST_ONEOF_TEST_DOUBLE = 12,
  FOO__TEST_MESS_ONEOF__TEST_ONEOF_TEST_BOOLEAN = 13,
  FOO__TEST_MESS_ONEOF__TEST_ONEOF_TEST_ENUM_SMALL = 14,
  FOO__TEST_MESS_ONEOF__TEST_ONEOF_TEST_ENUM = 15,
  FOO__TEST_MESS_ONEOF__TEST_ONEOF_TEST_STRING = 16,
  FOO__TEST_MESS_ONEOF__TEST_ONEOF_TEST_BYTES = 17,
  FOO__TEST_MESS_ONEOF__TEST_ONEOF_TEST_MESSAGE = 18,
} Foo__TestMessOneof__TestOneofCase;

struct  _Foo__TestMessOneof
{
  ProtobufCMessage base;
  protobuf_c_boolean has_opt_int;
  int32_t opt_int;
  Foo__TestMessOneof__TestOneofCase test_oneof_case;
  union {
    int32_t test_int32;
    int32_t test_sint32;
    int32_t test_sfixed32;
    int64_t test_int64;
    int64_t test_sint64;
    int64_t test_sfixed64;
    uint32_t test_uint32;
    uint32_t test_fixed32;
    uint64_t test_uint64;
    uint64_t test_fixed64;
    float test_float;
    double test_double;
    protobuf_c_boolean test_boolean;
    Foo__TestEnumSmall test_enum_small;
    Foo__TestEnum test_enum;
    char *test_string;
    ProtobufCBinaryData test_bytes;
    Foo__SubMess *test_message;
  };
};
#define FOO__TEST_MESS_ONEOF__INIT \
 { PROTOBUF_C_MESSAGE_INIT (&foo__test_mess_oneof__descriptor) \
    , 0,0, FOO__TEST_MESS_ONEOF__TEST_ONEOF__NOT_SET, {} }
```

- [x] Need to add tests and make sure logic works according to the Google parsing spec for edge cases, such as unpacking multiple oneof fields from the wire.