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.