Always use TypeHandler for parameters if available

Previously TypeHandlers could override the logic for built-in SQL data
types (int, byte, DateTime, etc.) when they were return values via
ITypeHandler.Parse, but ITypeHandler.SetValue was never called for these
types when used as parameters. Moved the typeHandlers.TryGetValue() call
up to make sure a type handler is always used if available.

Added tests to confirm standard behaviour is still working, and that ITypeHandler.SetValue is now called for built-in types.