Use internal 'printf'
Refine the error message format
Return instead of exit from function
Switch to using getopts

BSD/GNU getopt, despite generally having a nicer interface than
getopts, aren't reliable across platforms. Particularly the BSD
one's inability to parse options with spaces in them.

Unfortunately, getopts struggles with non-flag options so it is more
straight forward to specify an action with a flag now. Being able to
specify options out of order is nice after all.
Reflect new -a flag in docs and usage

Actions are no longer direct arguments to the programme and are
specified using a flag instead.
Show usage on error
Bail when no action specified