Convert refining

Improves the `Converter` framework by moving more default method implementations to `AbstractConverter`, restructuring the delegation of `AbstractConverter` to give preference to the `Type` argument, and extracting the `null` parameter logic to a dedicated `NullConverter` which can run at the highest priority, so that other `Converter` implementations do not need to worry about running ahead of `DefaultConverter`.