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
i should explain the scenario I am envisioning which causes a problem down the line if we bail at the top-level optional schema.

Imagine a schema along these lines:
```
optional struct container {
  required string id
  optional string some_string
}
```
and the requested schema is container.some_string

when we hit container, as written, we see it's optional and do not recurse; that means that when we read the data, we don't bother reading container.id, which means when we try to construct container, we get a run-time error.