Throws an error if passed in `value` is empty (0, null, undefined, false, empty {}, or empty []).
@function module:sjl.throwErrorIfEmptyOrNotOfType
@param prefix {String} - String to prefix to message.
@param paramName {String} - Param that expected a non empty value (hint for user).
@param value {*} - Value to check.
@param type {String|Function|undefined|null} - Type to check against.  Optional.
@param suffix {*} - String to append to message.
@throws {TypeError}
@returns {void}
function throwTypeErrorIfEmptyOrNotOfType (prefix, paramName, value, type, suffix) {
        var classOfValue = classOf(value),
            issetType = isset(type);

        // If `type` itself is not of the allowed types throw an error
        if (issetType && !isString(type) && !isFunction(type)) {
            throw new TypeError('`sjl.throwTypeErrorIfEmptyOrNotOfType.type` only accepts strings, functions (constructors),' +
                'null, or undefined.  ' +
                'Type received: `' + classOf(type) + '`.');
        }

        // Proceed with type check
        if (issetType && !classOfIs(value, type)) {
            throw new TypeError('#`' + prefix + '`.`' + paramName
                + '` is not of type "' + type + '".  ' + (suffix || '')
                + '  Type received: `' + classOfValue + '`.');
        }

        // Proceed with empty check
        if (isEmpty(value)) {
            throw new TypeError('#`' + prefix + '`.`' + paramName
                + '` Cannot be empty.  ' + (suffix || '')
                + '  Value received: `' + value + '`.  '
                + '  Type received: ' + classOfValue + '`.');
        }
    }