Refactor how JDBCSource handles type definitions

MySql and Vertica (and other db's we may want to support) have difference in their creation statements. This factors things so those can be controlled more easily (and it means someone could even support a new database type without having to change scalding!")

The following works:
```
class ExampleMysqlJdbcSource() extends JDBCSource[MysqlDriver.type] {
  import MysqlDriver._

  // Override the following three members when you extend this class
  override val tableName = TableName("test")
  override val columns: Iterable[ColumnDefinition] = Iterable(
    int("hey"),
    bigint("you"),
    varchar("get"),
    datetime("off"),
    text("of"),
    double("my"),
    smallint("cloud")
  )
  override def currentConfig = ConnectionSpec(ConnectUrl("how"), UserName("are"), Password("you"), MysqlDriver)
}
```

I don't love the two type typeclass, I'm looking into something better, but for now it works.

Note: this is not 100% there, I'm throwing this out there to get comments and see if people like the approach. Then I will clean it up.