lib/classes/Variables.js/Variables/populateObject
class Variables:  populateObject(objectToPopulate) {
    const populateAll = [];
    const deepMapValues = (object, callback, propertyPath) => {
      const deepMapValuesIteratee =
        (value, key) => deepMapValues(value, callback, propertyPath ? propertyPath
          .concat(key) : [key]);
      if (_.isArray(object)) {
        return _.map(object, deepMapValuesIteratee);
      } else if (_.isObject(object) &&
        !_.isDate(object) &&
        !_.isRegExp(object) &&
        !_.isFunction(object)) {
        return _.extend({}, object, _.mapValues(object, deepMapValuesIteratee));
      }
      return callback(object, propertyPath);
    };

    deepMapValues(objectToPopulate, (property, propertyPath) => {
      if (typeof property === 'string') {
        const populateSingleProperty = this.populateProperty(property, true)
          .then(newProperty => _.set(objectToPopulate, propertyPath, newProperty))
          .return();
        populateAll.push(populateSingleProperty);
      }
    });

    return BbPromise.all(populateAll).then(() => objectToPopulate);
  }