Use GlobalSettings by default for AssetsBuilder (fixes #2919)

- call global `onHandlerNotFound` when asset can’t be found
- also factor out `onBadRequest` and `onError`
- make these three error handlers `protected` so that their behavior can be overridden.
GlobalSettings is about to be deprecated and removed, the trait that replaces it is going to completely restructure those methods, they will likely to be replaced with something along the lines of:

```scala
def onClientError(statusCode: Int, msg: String)
def onServerError(statusCode: Int, msg: String, exception: Option[Throwable])
```

This is one of the main reasons that I'm wary to introduce it.

As for custom logging/metrics, isn't the right place to put those in GlobalSettings (or the thing that replaces it?).  Another solution that will be possible in Play 3 (maybe 2.4) is that the assets controller will be dependency injected, and will have a dependency on the thing that replaces GlobalSettings (let's call it HttpErrorHandler for now).  So if you wanted to do custom error handling just for the assets controller, the solution would be to inject your own custom error handler into it - and that's a much better approach than overriding inherited methods, composition over inheritance.