WIP datasources: Add support for specifying multiple datasources

WIP

If multiple sources are specified, the first available source is used.
Better to spawn a goroutine for each datasource instead, no?
```
  func getDatasource(sources []datasource.Datasource) datasource.Datasource {
          next_ds := make(chan datasource.Datasource)
~         for _, s := range sources {
~                 go func(ds chan datasource.Datasource) {
~                         duration := datasourceTimeout
~                         for {
                                  fmt.Printf("Checking availability of %q\n", s.Type())
                                  if s.IsAvailable() {
                                          ds <- s
                                          return
                                  } else if !s.AvailabilityChanges() {
~_                                        return
                                  }
+                                 time.Sleep(duration)
+                                 duration = pkg.ExpBackoff(duration, datasourceMaxTimeout)
                          }
~                 }(next_ds)
~_        }
  
          select {
          case ds := <-next_ds:
                  return ds
          case <-time.Tick(datasourceTotalTimeout):
                  return nil
          }
```

(completely untested)