Implement Semigroup#parSumOption

This change implements parSumOption which should return the same thing as sumOption, except wrapped inside a **scala** Future and with the execution done (hopefully) in parallel. If the user needs to use a Twitter Future, there is a bijection for that. I chose to not use an Int generator in the tests because I figured that doing so would really slow down testing but I can do something like

```scala
  def semigroupParSumWorks[T: Semigroup:Arbitrary:Equiv] = forAll { (in: List[T], blockSize: Int) =>
     Equiv[Option[T]].equiv(Await.result(Semigroup.parSumOption(in, blockSize), Duration.Inf), Semigroup.sumOption(in))
  }
```

if it's preferred.