compose: Two small fixes

1) [taskbase] import fail_msg module so failure to find config
   file is properly displayed to stdout
2) [imagefactory] added conditional to check if imagestmpdir
   exists prior to the mkdir()
treecompose: Make rpmostreecachedir optional

If rpmostreecachedir isn't provided, don't require it and
don't send cachedir to rpm-ostree.
flake8 exception: lengthen line length to 160

Lengthen default 80 character length to 160 to keep python code
readable and somewhat sane.
config.ini: Put rpmostree_cache_dir in outputdir by default

workdir is meant to be a per-task run, so it doesn't make sense to
cache anything there, as it'll be cleaned up.
installer: Require output dir specification

Previously we'd hardcoded images/<partial checksum>, but I'm finding
that what I really want to do is stage my choice of images, and then
put them into place manually.  Or if not manually, in a more flexible
way that can be encoded into this script.

So this change then just forces callers to specify an output
directory.
taskbase: Use values from ini, override with json
taskbase: Flatten json file(s) input to tempdir
taskbase: copy repo file(s) to tempdir

Certain required variables in ini files like ref were unused in
tree composes.  These fixes result in using setting a rule that
if the value is in the ini file, use it but it can be overriden
by input from a json file.  The ini variable is then added to a
temporary json file that is stored in a tempdir and consumed by
'rpm-ostree compose tree'.

Along with adding the ini content to the json file, a function
was also added to detect if the json file has an include
statement.  If so, it will inherit the included json file
content and merge the two with the following rules:

    * if the key value doesn't exist in the json, add it
    * if the key value is a list and does exist, merge and
      remove duplicates.

And finally, to make processing for 'rpm-ostree tree compose'
easier, the detected repo files are copied to the temp dir.