add readWithDefault for rich entities and rich attributes

This is added as a convenience mechanism after feedback from @tixxit.

```scala
val default: T = …
entity.readWithDefault(attr, default)
```
is provided as a convenience for
```scala
entity.readOpt[T](attr).getOrElse(default)
```

and

```scala
val r = attr.readWithDefault(default)
r.read(entity)
```
is provided as a convenience for
```scala
val r = attr.readOpt[T].map(_.getOrElse(default))
r.read(entity)
```
@tixxit I changed `default` to be call-by-name. Just wanted to check that this would match up with your expectation.