Refactor discovery to use invokeInWorkspace 

This is a major set of changes and should be released as a minor version.

 - Refactor `invokeInWorkspace()` to support all `dataSource` methods
 - Implement `getSchema()` and `discoverModelDefinition()` using `invokeInWorkspace()`
 - Add new `dataSourceDef.createModel()` to create model definitions + configs using a discovered model definition from `discoverModelDefinition()`

/to @bajtos @raymondfeng 
/cc @seanbrookes 
The current version allows you to run `bin/datasource-invoke.js` manually from command-line, I found it useful for troubleshooting and debugging.

Could you please preserve that behaviour?

```
// example implementation
if (process.send) {
  process.send({ /* ... */ });
} else {
  console.log('--datasource-invoke-result--');
  console.log(JSON.stringify(err || args));
}
```