Add safety checks and rewrite to support new constraints
Add safety checks and rewrite to support new constraints

The additional checks in the "Safety" section help avoid unexpected
behavior by requiring initialized variables and failing early.

In order to support these new checks, much of the behavior requires
rewriting. Some of the things that require updates:

- Handle command listing and loading separately. Command loading is an
  internal operation, while listing the commands is part of the UI.
- Rewrite command loading so fewer assumptions are made and spaces are
  not required or relied upon for array elements. This also moves some
  operations to awk and simplies the if clause filtering.
- Rewrite debug to have more explicit behavior.
- Add tests to variable calls in order to ensure that they are loaded,
  that a default value is specified, or that they fail in an expected
  manner.

alphabetum/bash-boilerplate