support non-modules in @require

Functions and other objects can be passed, which implies a push when the function is passed to apply.

This relieves one of the most common complaints in IPython.parallel - allowing multi-function tasks without a `push` call for the intermediate functions.

```python
def foo(a):
    return a*a

@parallel.require(foo)
def bar(b):
    return foo(b)

@parallel.require(bar)
def baz(c, d):
    return bar(c) - bar(d)

view.apply_sync(baz, 4, 5)
```

Pinging @ogrisel as the source of the idea at PyData.