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 change is modifying the behaviour under the test. The test no longer checks that when the child process crashes with an unhandled error, this error is correctly reported back to the caller.

I am not sure if such situation can still happen. If it can, then you need to rewrite this test. If it cannot, then the test should be removed.

Regardless of that, you should probably keep the modified version of this test and rename it to match the intent - i.e. the invocation fails with an descriptive error when the datasource does not exist.