code: function(foo, self) {
          return function() {
              var arg, tmp, args = [];
              for (var i = 0, l = arguments.length; i < l; i++) {
                  arg = arguments[i];
                  if (_isFunction(arg)) {
                      if (arg.tryWrap) {
                          arg = arg.tryWrap;
                      } else {
                          tmp = cat(arg);
                          arg.tryWrap = tmp;
                          arg = tmp;
                      }
                  }
                  args.push(arg);
              }
              return foo.apply(self || this, args);
          };
      }
docs: makeArgsTry
  wrap a function's arguments with try & catch
  @param {Function} foo
  @param {Object} self
  @returns {Function}