/*
performs the following mappings on the supplied value(s):

- already-escaped/preserved values are passed through verbatim
- null and undefined are ignored (i.e. mapped to empty arrays,
which are pruned by flatten)
- non-strings are stringified e.g. false -> "false"

then flattens the resulting array and returns its elements joined by a space
function _shellEscape (params, options = {}) {
    let escaped = [ __shellEscape(params, options) ]
    let flattened = _.flattenDeep(escaped)
    return flattened.join(' ')
}