Avoid pruning required fields

1. refactor schema converter to vistor pattern
2. fill in protocol events for required fields
3. Use TriftStruct for schema conversion instead of TBase