Make all @ThriftStruct classes final

Also:
- makes generator generate final classes.
- adds a check that all thrift struct classes used as parameters, return types, or field types are final

The motivation is to reduce confusion about what level of support swift has for inheritance: you can build your thrift struct types by inheriting from base types that have some common thrift fields, but you should not try to declare a base type for a param, return value, or field, and then try to send derived types in place of that base type (because thrift protocol doesn't support polymorphism).
Update: include unions
Update: resolutions for issues after rebase