Goals of the sql and sql/driver packages:

* Provide a generic database API for a variety of SQL or SQL-like
  databases.  There currently exist Go libraries for SQLite, MySQL,
  and Postgres, but all with a very different feel, and often
  a non-Go-like feel.

* Feel like Go.

* Care mostly about the common cases. Common SQL should be portable.
  SQL edge cases or db-specific extensions can be detected and
  conditionally used by the application.  It is a non-goal to care
  about every particular db's extension or quirk.

* Separate out the basic implementation of a database driver
  (implementing the sql/driver interfaces) vs the implementation
  of all the user-level types and convenience methods.
  In a nutshell:

  User Code ---> sql package (concrete types) ---> sql/driver (interfaces)
  Database Driver -> sql (to register) + sql/driver (implement interfaces)

* Make type casting/conversions consistent between all drivers. To
  achieve this, most of the conversions are done in the db package,
  not in each driver. The drivers then only have to deal with a
  smaller set of types.

* Be flexible with type conversions, but be paranoid about silent
  truncation or other loss of precision.

* Handle concurrency well.  Users shouldn't need to care about the
  database's per-connection thread safety issues (or lack thereof),
  and shouldn't have to maintain their own free pools of connections.
  The 'db' package should deal with that bookkeeping as needed.  Given
  an *sql.DB, it should be possible to share that instance between
  multiple goroutines, without any extra synchronization.

* Push complexity, where necessary, down into the sql+driver packages,
  rather than exposing it to users. Said otherwise, the sql package
  should expose an ideal database that's not finnicky about how it's
  accessed, even if that's not true.

* Provide optional interfaces in sql/driver for drivers to implement
  for special cases or fastpaths.  But the only party that knows about
  those is the sql package.  To user code, some stuff just might start
  working or start working slightly faster.
