result: avoid dynamically-sized stack allocation

Otherwise, long field names have the potential to cause stack
overflow and perhaps slow down the MRI GC.  This reduces one
extraneous data copy while we're at it, too.

Using the checkstack.pl script in the Linux kernel reveals
no other dynamically sized stack allcations after this change.
usage: objdump -d mysql2.so | ~/linux/scripts/checkstack.pl x86_64
Merge pull request #480 from brianmario/stack-allocation-fix

Avoid dynamically-sized stack allocation
Ensure error messages are always valid UTF-8

Given all of the scenarios for a MySQL error message's encoding,
the end result is either a) a potentially corrupt string
or b) a valid UTF-8 string. In any case, we'll want to end up with
a UTF-8 string eventually.
make sure we return error message and sql state in Encoding.default_internal if set
try and work around rspec bug maybe?
make sure all test clients use DatabaseCredentials
reset Encoding.default_internal before depending on it's behavior
use a more specific UTF-16 variant
replace invalid chars on encode
clean up reassignments of Encoding.default_internal to ensure it's set back to it's original value
allow rbx failures for now

See https://github.com/rubinius/rubinius/pull/2892 for more info
use '?' for replacement character even on 2.1 and mysql 5.1
Merge pull request #482 from brianmario/error-encoding

Ensure error messages are always valid UTF-8