add support for module-advised sections (@section)

"relocate" module sections like header/license, variables, functions, and
module initialization code, e.g. by moving user-configurable variables
to the top of the generated file.

Modules have to declare their sections explicitly, by having one or more
"# @section <section name>" statements in the *.sh/*.bash file, where
<section name> is one of:
* license/licence
* header
* user_constants/user_const
* user_variables/user_vars
* symdef
* funcdef
* constants/const
* variables/vars
* module_vars/funcvars
* functions/func/functions_export
* module_init_vars/module_features
* module_init/init
* default/___
  (this was the default section for all *sh text/code prior to this  commit)

Both the @section keyword and the section name are case-insensitive.

More specifically, a statement matching the following (pseudo)-BNF is parsed
as @section declaration:
  "#^n\s^k@section\s^j<fillchar>^l<section name><fillchar>^m"
  where n>0, k>0, j>0, l>=0, m>=0
  and fillchar is any of  '_-+=^,;~*><'

A non-empty sequence of fill chars is read as "default".

Notes:
* modules with @sections must not depend on modules without sections(!)
* module are expected to function properly even without relocation

Sections can be extracted with --extract-sections [<section>][,[-]<section>...],
for example:

>> "shlibcc -X user_const,user_vars,const,vars --no-header"
    extracts all variables (except for private module vars)

>> "shlibcc -X license --no-header" for getting all licenses

>> "shlibcc -X header --no-header" for module headers (mostly documentation)

This commit also adds a another shlibcc instruction, safety checks, which can
be used to add non-essential checks as comments to the code, prefixed with
"# @safety_check" or "# @double_tap":

>>> # @safety_check [ -d "${1}" ] || die
>>> # @double_tap   : ${1?}

Similar to "@section", the amount of comment chars followed whitespace chars
is insignificant (>1 comment char followed by >1 whitespace char) and the
keyword @SAFETY_CHECK,... is case-insensitive.

The safety checks behavior can be controlled with the
--keep-safety-checks={yes,no,comment} option.