Upgrade slick to 2.1.0

Also contains some starts to refactors. Making this PR now as to match up with the upgrade to slick 2.1.0 in GeoTrellis and the gtfs-parser project.

Feel free to ask questions about the work-in-progress refactor on this PR. I'm making comments to point out a couple of things that I changed.
This PR does fix this, but that error is specifically because the `list` function lost it's empty params in slick 2.1.0. In scala, if a function is defined with an empty parameter list:

```scala
def now(): Long = System.currentTimeMillis
```
you can call that two ways:

```scala
val n: Long = now()
val n2: Long = now
```

However, if `now` is defined without the empty parameter list:

```scala
def now: Long = System.currentTimeMillis
```

you can only call it with no parameter list:
```scala
val n: Long = now // fine
val n2: Long = now() // compile error!
```

Where the `Unspecified value parameter session` comes in has to do with implicit parameters following an empty parameter list, or defined for a function without a parameter list.

To continue our example (which is very contrived I know):

```scala
trait TimeGiver { 
  def milliseconds: Long 
}

class SystemTimeGiver() extends TimeGiver { 
  def milliseconds: Long = System.currentTimeMillis
}

def nowWith()(implicit tg: TimeGiver): Long = tg.milliseconds
def nowWithout(implicit tg: TimeGiver): Long = tg.milliseconds

implicit val tg = new SystemTimeGiver

nowWith()  // fine, because we call with an empty parameter list and then the implicit kicks in
nowWith    // also fine, because the empty parameter list is implied, or deduced by the compiler
nowWith()(tg) // Fine, this is passing in the implicit parameter explicitly
nowWith(tg) // Compile error! It thinks you're trying to pass tg into the empty parameter list

nowWithout  // fine, the implicit kicks in
nowWithout(tg) // fine, implicit parameter tg is explicitly stated.
nowWithout()  // Compile error! The empty parameter list () is reasoned by the compiler
                       // as you trying to specify the implicit parameters explicitly, and leaving out the 'TimeGiver' parameter
nowWithout()(tg) // Unsurprisingly, Compile error!
```
So `def list()(implicit session: ...)` turned into `def list(implicit session: ...)` between slick 2.0.1 and slick 2.1.0, and therefore you can't call it with `list()` empty params, and have to just call it `list` without a parameter list.