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 
This is introducing a subtle breaking change.

Consider the following invocation:

```js
invokeMethodInWorkspace('name', undefined, 'value', callback);
```

The original code removed optional (`undefined`) arguments from the end only, while your code remove them from any position.