private static List<Boolean> addToList(final List<Boolean> list, final Boolean element) {
        final List<Boolean> tempList = new ArrayList<>(list);

        tempList.add(element);
        return tempList;
    }
Recursive method to work out all the permutations of the tag values where
the value can be either true or false. True means the tag at that
position should be rolled up, false means it should be left as is.
<p>
colour state user
<p>
false false true
<p>
true false true
<p>
true true false
<p>
true false false
<p>
false true false
<p>
false true true
<p>
false false false
<p>
true true true
<p>
<p>
<p>
On each recursive iteration it fans out by two, each time building up the
soFar list until it has filled all positions.

@param soFar      This is the list of boolean values that gets built up as it
                  goes along. Top level call should pass in an empty list.
@param iterations Top level call should pass in the size of the source list to
                  permute
@param resultSet  The set of complete permutations that gets built up as each
                  one is found.
stroom-statistics/stroom-statistics-impl-sql/src/main/java/stroom/statistics/impl/sql/rollup/RollUpBitMask.java