Unwrap optional types in models

This PR treats optional fields as their unwrapped counterparts (#728). The class name string comparison feels a little janky, but should support both Guava and Java 8 optionals.

/cc @wsorenson @hgschmie @stevenschlansker