function createCallback(callback, defaultValue) {
    switch (typeof callback) {
      case "function":
        return callback;

      case "string":
        return function(e) {
          return e[callback];
        };

      case "object":
        return function(e) {
          return Lazy(callback).all(function(value, key) {
            return e[key] === value;
          });
        };

      case "undefined":
        return defaultValue ?
          function() { return defaultValue; } :
          Lazy.identity;

      default:
        throw new Error("Don't know how to make a callback from a " + typeof callback + "!");
    }
  }
Creates a callback... you know, Lo-Dash style.

- for functions, just returns the function
- for strings, returns a pluck-style callback
- for objects, returns a where-style callback

@param {Function|string|Object} callback A function, string, or object to
    convert to a callback.
@param {*} defaultReturn If the callback is undefined, a default return
    value to use for the function.
@returns {Function} The callback function.

@examples
Lazy.createCallback(function() {})                  // instanceof Function
Lazy.createCallback('foo')                          // instanceof Function
Lazy.createCallback('foo')({ foo: 'bar'})           // => 'bar'
Lazy.createCallback({ foo: 'bar' })({ foo: 'bar' }) // => true
Lazy.createCallback({ foo: 'bar' })({ foo: 'baz' }) // => false