[IFRT] Add type checking for `Deserialize`
[IFRT] Add type checking for `Deserialize`

`Deserialize` now takes an expected type for a deserialized object. It also
checks if a supplied `DeserializeOptions` is expected for the type of the
deserialized object; `Serializable` class can define a `DeserializeOptions`
type within the class to express the expected `DeserializeOptions` type.
