Change `TypeConverter`, have specific methods for converting

This changes `TypeConverter` to have specific methods for
converting values to a new type. This is setup for using assert's
factory. This is also a better implementation that doesn't depend
on a switch case or any conditionals. Only the interface changed,
the rest of the behavior and functionality stayed the same.

This temporarily keeps the `convert` method on `TypeConverter`.
This will be removed when `ReadModel` and `Factory` stop using it.