[clean] prepared statements

The master branch has diverged quite a bit since the original prepared statement commits by tenderlove, brianmario, and nyaxt. I've gone through most of the original commits and wrangled them to fit a clean branch. Tests pass with each commit.

APIs featured:

`Mysql2::Client#prepare(query) # => Mysql2::Statement`
`Mysql2::Statement#execute(*params) # => Mysql2::Statement`
`Mysql2::Statement#param_count # => Integer`
`Mysql2::Statement#field_count # => Integer`
`Mysql2::Statement#fields # => Array[String]`

This PR includes commits from nyaxt up to 50a7054299e08af1356ffae80fda13301a5a882f. Most notably, his work on returning `Mysql2::Result` from `Mysql2::Statement#execute` is missing.

This PR supersedes others and gives us a clean slate to work from.