Scrooge schema converter and projection pushdown in Thrift

This branch contains many commits, it's draft branch for review. I will do a squash before merging it
Following are changes
1. Refactor: make ThriftSchemaConverter pluggable, so that ScroogeStructConverter can convert scrooge class to ThriftType and pass it to ThriftSchemaConverter to convert it to MessageType and do projection pushdown.
2.Implement ScroogeStructConverter, which provides functionalities similar to ElephantBird but for scrooge
3.Implement ScroogeReadSupport, which is a subclass of ThriftReadSupport
4.Currently treat fields without requirement type as "Required", since scrooge does not provide requirement information in generated classes, current solution uses reflection to inspect if a field is "REQUIRED" or "OPTIONAL" . This limitation should not affect read path.