Enable extend to accept multiple arguments

Currently, extend only takes a single argument. If you want to mixin a module, you have to use _.extend in one of three ways:

1. before:
```
myObject = _({}).extend(SomeMixin, {
  ...
});
extend('myNamespace', myObject);
````

2. after:
```
extend('myNamespace', {
  ...
});
myNamespace = _({}).extend(SomeMixin, myNamespace);
```

3. during:
```
extend('myNamespace', _({}).extend(SomeMixin, {
  ...
}));
```

I want this:
```
extend('myNamespace', SomeMixin, {
  ...
});
```

Internally, we're already using _.extend. I'd like to take advantage of extend's variadic capability.

# Todo:
- [x] accept multiple arguments
- [x] handle multiple arguments that are a mix of functions and objects