Fix #96 many implicit conversions to/from String were broken.

Changed ``SQLTypeUtils.coerceToString()`` to accept a ``Type`` parameter and use the type-appropriate ``TextCodec`` if available.  Changed ``SQLTypeUtils.coerce()`` to handle coercions from ``String`` to the required type if the text parameter format is supported for that type using the type-appropriate ``TextCodec``.   Changed ``SQLTypeUtils.coerceToBytes()`` to use type-appropriate ``TextCodec`` if the source value is a String and a codec exists.

Added test case to cover original issue, plus additional tests that uncovered further conversion issues.  All suite tests passing.

Yes, because the conversion of the type may be from ``byte[]`` to String via a specific conversion.  In the case of the ``macaddr`` type, ``val`` is a ``byte[]``.  If this code runs first:
```java
else if (val instanceof byte[]) {
   return new String((byte[]) val, context.getCharset());
}
```
we just try to convert the bytes into a string directly, but what is needed is that the ``MacAddrs.TxtEncoder.encode()`` should be called because it knows how to convert a byte[]-encoded MAC address into text.