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)
```
Yup - makes sense.