do ProtocolEvents fixing only when there is required fields missing in the requested schema

https://issues.apache.org/jira/browse/PARQUET-61
This PR is trying to redo the https://github.com/apache/incubator-parquet-mr/pull/7

In this PR, it fixes the protocol event in a more precise condition:
Only when the requested schema missing some required fields that are present in the full schema

So even if there a projection, as long as the projection is not getting rid of the required field, the protocol events amender will not be called.

Could you take a look at this ? @dvryaboy @yan-qi
If there is an optional field, the recursion will occur. Please notice the else block is in that catch block. so if the requestedType is optional and exist, the whole if else block will not be executed.

So in your example, if the requested schema contains the container, it will recurse(it will not enter the try catch block). if the requested schema does not contain the container(because the parent is not there, then no need to check its children), then the recursion will not occur.

I do agree current implementation is messy due to the try catch for flow controll. Will try to find a better way of doing this.