Simplify how we determine if an action is a reducer or effect.
Simplify how we determine if an action is a reducer or effect.

If your action returns a model or part of a model, then this
value is merged with the model and the view is updated, this
is exactly how reducers work right now.

If your action returns undefined (does not return anything)
we don't update the model, and it works exactly how effects
do right now.

As a special bonus, if your function returns a Promise-like
object, we assume it's an effect too and return the promise.
This lets you use async/await with actions or create a chain
of task promises. Only remember to always keep your promises.

Mytrill/hyperapp,Mytrill/hyperapp