Add semantic versioning
Add version/first run/last version run support

- `Workflow.version` reads version from `update_settings` dict or `version` file
- `Workflow.first_run` true if this version has never run before
- `Workflow.last_version_run` set after successful workflow run via `Workflow.run`
- `workflow:version` magic arg to display version number
- Version number logged when run starts
- Document above features
Merge branch 'feature/first_run' into develop