Collect type information for each possible response code

This PR comes with some uncertainty. There is a lot if implicit magic with how it works, but it appears to work well. It allows routes of the form
```scala
route |>> { () =>
  if (isOk) Ok(someTypeWithWritable)
  else NotFound(someOtherType)
}
```
that will result in the correct correlation with status code and model. 

__Note:__ The situation is not as rosy when using the same status with multiple types:
```scala
route |>> { () =>
  if (isThisResult) Ok("some text")
  else Ok(<html><body>Some html</body></html>)
}
```
Will result in a correct status but no other type information unless you define a `Writable[java.io.Serializable]` (which would certainly have the wrong info anyways).

All in all, do we like this? My biggest concern is possible variability in how different versions of scalac will handle the complex implicit resolution.