code: function objectSearch(object, needle) {
          var caseSensitive = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
  
          var p = void 0;
          var key = void 0;
          var val = void 0;
          var tRet = void 0;
          var normalize = function normalize(str) {
              return caseSensitive ? globalHelpers.camelize(str).toLowerCase() : str;
          };
  
          for (p in needle) {
              if (needle.hasOwnProperty(p)) {
                  key = p;
                  val = needle[p];
              }
          }
  
          for (p in object) {
              if (p === key) {
                  if (normalize(object[p]) === normalize(val)) {
                      return object;
                  }
              } else if (object[p] instanceof Object) {
                  if (object.hasOwnProperty(p)) {
                      tRet = this.objectSearch(object[p], needle, caseSensitive);
                      if (tRet) {
                          return tRet;
                      }
                  }
              }
          }
  
          return false;
      }
docs: Search through an object recursively and return the first match of the key:value passed
  @access public
  @param {Object} object - The haystack
  @param {Object} needle - Key value pair that will be searched
  @param {Boolean} [caseSensitive=false] Enable/disable case sensitive on search
  @return {Object}
  @example
  var data = [{
  id: 0,
  name: 'key 0',
  children: [{
  id: 1,
  name: 'key 1',
  children: [{
  id: 2,
  name: 'key 2',
  item: [{
  id: 3,
  name: 'key 3'
  }],
  item: [{
  id: 4,
  name: 'key 4'
  }]
  }]
  }]
  }];
  objectSearch(data, {id: 4}); // { id: 4, name: 'key 4'};