static getObjectKeyPermutations(object, index = 0, current = {}, results = []) {
    const keys = Object.keys(object);
    const key = keys[index];
    const values = object[key];

    for (const value of values) {
      current[key] = value;
      const nextIndex = index + 1;

      if (nextIndex < keys.length) {
        Utils.getObjectKeyPermutations(object, nextIndex, current, results);
      } else {
        const result = Object.assign({}, current);
        results.push(result);
      }
    }
    return results;
  }
Creates an object with all permutations of the original keys.
For example, this definition:
```
{
  a: [true, false],
  b: [1, 2],
  c: ['x']
}
```
permutates to:
```
[
  { a: true, b: 1, c: 'x' },
  { a: true, b: 2, c: 'x' },
  { a: false, b: 1, c: 'x' },
  { a: false, b: 2, c: 'x' }
]
```
@param {Object} object The object to permutate.
@param {Integer} [index=0] The current key index.
@param {Object} [current={}] The current result entry being composed.
@param {Array} [results=[]] The resulting array of permutations.