encourages users to fail futures properly

@gdickinson pointed out to me that we don't have a place in effective scala where we explicitly say we should prefer the Future failure mechanism over throwing exceptions.  This makes it explicit, rather than implicit.
This is a super long sentence, and is difficult to parse. Also, this is about more than being confusing -- it's about being right: since the future encapsulates a computation, it should do the same for a computation failure. Suggested wording:

Futures represent both successful and failed computations. Therefore, it's important that errors involved in that computation are properly encapsulated in the returned future. Concretely, return `Future.exception` instead of throwing that exception:

```
def divide(x: Int, y: Int): Future[Result] = {
  if (y == 0) 
    return Future.exception(new IllegalArgumentException("Divisor is 0"))

  Future.value(x/y)
}
```

Fatal exceptions should not be represented by Futures. These are exceptions include ones that are thrown when resources are exhausted, like `OutOfMemoryError`, and also JVM-level errors like `NoSuchMethodError`. The predicate `scala.util.control.NonFatal` (or, Twitter's version `com.twitter.util.NonFatal`) are used to these exceptions.