interpret table names in context of mountPath and basePath (Fixes #198)

`backendFor` and `dataSourceFor` can be special cases of a more general function to eliminate the duplication between these methods. Something like:

```scala
private def backendFor0(path: Path): ResponseFunction[Any] \/ (Backend, Path, Path) => fs.lookup(path) \/> (NotFound ~> ResponseString("No data source is mounted to the path " + path))

private def backendFor(path: Path) = backendFor0(path).map { case (a, b, _) => (a, b) }
private def dataSourceFor(path: Path) = backendFor0(path).map { case (a, _, c) => (a.dataSource, c) }
```

etc.