Execution details are now configurable. The new top-level ExecutorDefinition and @executor
APIs are used to define in-process, multiprocess, and Dask executors, and may be used by users to
define new executors. Like loggers and storage, executors may be added to a ModeDefinition and
may be selected and configured through the execution field in the environment dict or YAML,
including through Dagit. Executors may no longer be configured through the RunConfig.
The API of dagster-dask has changed. Pipelines are now executed on Dask using the
ordinary execute_pipeline API, and the Dask executor is configured through the environment.
(See the dagster-dask README for details.)
Added the PresetDefinition.from_files API for constructing a preset from a list of environment
files (replacing the old usage of this class). PresetDefinition may now be directly
instantiated with an environment dict.