Instead of apply() use __call__()

- Instead of requiring a apply() function just use the built-in one provided by objects or functions implementing `__call__`.
- Also change how requires/provides may not be found if functors are just passed in (since functors implement `__call__`).
- Add nice decorators that can be used for requires/provides.