Add support for union, binary fields, and empty structs

This PR adds support for unions, binary fields, empty structs, and semicolons at the ends of lines within structs, with the goal of allowing someone to load the [Apache Storm thrift file](https://github.com/apache/incubator-storm/blob/master/storm-core/src/storm.thrift). 

Some notes about implementation:
- `unions` are just loaded up as `structs` for now. In the future we might want to modify `_compat.init_func_generator` to enforce the restriction that you are only supposed to set one of the fields of a union.
- `binary` fields are just special cases of `string`, so when receiving `string` fields in the binary protocol, we try to decode as `utf-8` first, but if that fails we just return the bytes.
- There were a few places where the grammar had `OneOrMore` instead of `ZeroOrMore`, which prevented declaring empty structs. I've fixed that.
- The [Thrift IDL](https://thrift.apache.org/docs/idl) specifies that you can use semicolons or commas as list separators in some places, so I've added support for semicolons.


I'll finish adding the test data tomorrow; I just wanted to trigger a travis build to make sure everything was working so far.