Result should return type_casted values

The `type_cast` should be done earlier. `select_*` uses the values
provided by the `result` class, so it makes sense to use the `type_cast`
method from the adapters and passed into the class (`column_types`).

*before*

```
Person.create(
  tags: ["cfabianski", "cedric"],
  tag_ids: [4, 8, 9]
)

query = Person.where(["? = ANY (tags)", "cfabianski"])
row   = Person.connection.select_one(query)

=> {"id" => "1", tags" => "{cfabianski,cedric}", "tag_ids" => "{4,8,9}"}
```

*after*

```
Person.create(
  tags: ["cfabianski", "cedric"],
  tag_ids: [4, 8, 9]
)

query = Person.where(["? = ANY (tags)", "cfabianski"])
row   = Person.connection.select_one(query)

=> {"id" => 1, "tags" => [cfabianski, cedric], "tag_ids" => [4, 8, 9]}
```
Fix MySQL adapter

Before this commit, MySQL was assuming that `'SELECT DATABASE() as db'`
(`AbstractMysqlAdapter#current_database`) was a `Decimal`. The dbname
was always `0.0` for that reason.
Fix tests due to type_cast

Because of the `type_cast` introduced in the `Result` class,
`"1"` became `1` when the column is defined as an Integer.