Merge tag '4.0.0' into develop

v4.0.0 released

- new, (hopefully) improved API
Fix: handle implicit command robustly
New: DefinedSwitch no longer has a constructor, call setName() and setShortDescription() explicitly
Version bump for API fixes
Merge branch 'release/4.0.1'