lmod: added `available` property to module

This lets us avoid checking for lmod-related env. variables outside of
the module itself.
command.py: include command args in "valid commands" lists
option.py: allow option-args to be made optional with sq. brackets

...in the description, in addition to previous method of using an
additional argument to Option.__init__ to declare the option-args as
optional.
command.py: in `helpfn`: added assertion that `command_list` is a list
command.py: helpfn: clarify when we're listing _sub_-commands
command.py: added --purge option to build command

This can be used to remove existing build directories.
command.py: build: default package ChaNGa
command.py: build: added "detailed" docstring for command
core.py: PackageSet: also save when save_flag is missing
core.py: add missing @property tag on Package.remotes