fix Typing[4110] errors by refactoring Options
Summary:
The remaining type errors come from $options being a `dict<string,mixed>`
rather than a shape or class. Each option is naturally a different type,
and it is useful to allow additional properties (and methods), since `$options`
is already plumbed around everywhere.
I considered using a shape instead of a class to reduce churn, but
a dedicated class Options came out cleaner in the end.
Reviewed By: ricklavoie
Differential Revision:
D33277162
fbshipit-source-id:
8eca8978739250422a25a62de659193ba8ff81fb