Separated ShellActions from src.execute.action

Isolates the activities of SAs from base action definition and testing.
Not strictly necessary, since SAs aren't used at all in SALVE at this
stage, but good cleanup in preparation for dynamic action def in
src.execute.action
Added DynamicAction definition.

DynamicActions simply have a __call__ method that invokes generate(),
and by default execute() raises an exception. This means that unless
generate overwrites execute with the desired actions, the DA will fail.
Merge branch 'feature/dynamic-actions' into dev