moved default type coercion to multimethod so it is extensible