Refactor screen selection data structure

Previously all selections are stripped to a "region", i.e. nothing more
than an "offsets" value stored in the offsets_list array. There was no
way of knowing where each set of offsets came from.

This commit introduces several new data structures for preserving
information of the origin of each selection, as well as the order in
which the selections are made.
The implementation is not pretty, mostly because bash lacks support for
multi-dimensional arrays. But it's an improvement, nevertheless.

The indexed array 'rects' stores varname of each selection, in the
order they are made.

The indexed array 'regions' stores offsets of rectangular region
selections made by '-g' and '-s'.

The associative array 'heads' stores offsets of selected Xinerama heads,
with keys set to their head ID.

The associative array 'windows' stores offsets of window selections made
by '-#' and '-w', with keys set to their window ID.

With these variables, the offsets_list array is redundant, but for now
it's kept as is.

Additionally, this commit also removes some duplication by processing
the user selections live as the command line options are processed.
This requires the root window size to be queried before options are
processed, which means an error will be produced when ffcast is run
without a $DISPLAY even if only -h is passed. To deal with this
situation, make ffcast print the help message when this error happens.
This also mandates that the '-q' and '-v' options be given before all
other options, if they were to take global effect.
Separate format string processor from mapping data

Strip out the format string mapping data from the format string
translator function, so we can re-use this worker function with other
format string mapping rules.

Note `eval` is used in substitute_format_strings() to evaluate variables
at runtime. Keep this in mind when writing format string mapping rules.
'each' now supports format strings %i, %n, %t

Try: ffcast -ws each echo %%%%%n-%t_%i
Get rid of the offsets_list array
Release 2.3.0 "Elaborate"