Added a TypedValue wrapper to allow for stricter binding

Prior to this change, all values were quoted in the process of binding
to sql. This was due to it not being possible to determine if the php
value was correctly typed. For example the underlying db type might be
an integer, but the value passed is '1234'.

This change provides a wrapper for correctly typed values, meaning that
the Marshal system can make strong guarantees about the type of a value
it emits.

This is another step towards better native binding and Mysql strict mode
compatibility.