Generalise Nondeterminism gather to use Reducers

Previously we were reducing to a `List` - `aggregateCommutative` would
then `foldMap` the `List` to a final result. We should be able to skip
the generation of the intermediate list, if that's not what we want.
Override `reduceUnordered` in `Future` and `Task`

Allows more general reductions.
Remove calls to `implicitly[Reducer[A, M]]`

Already have the evidence available.
Add `reduceUnordered` to scalaz.concurrent.Future
Change tests to reduce to Set rather than gather

Previously `Future` and `Task` tests were gathering to a `List` and then
converting the list to a `Set` - this now tests the generalised
`reduceUnordered` method, which will remove the intermediate lists.
Make `FutureTest` not rely on result ordering

This test should probably instead be deleted.
Remove problematic case from `FutureTest`
Add test for timed Future

This really should not be a test and should instead be a benchmark. We
shouldn't be able to observe what this test is asserting.

scalaz currently does not provide any sort of benchmarking tools. We'll
use this test for now but its utility is very debatable.
Merge pull request #650 from puffnfresh/nondeterminism-reducer

Generalise Nondeterminism gather to use Reducers