Avoid reflective calls by structural subtyping

This change breaks API compatibility.

User code that uses UnixTimeInMillisConverter directly needs to revise.