Allow to specify alternative types for properties

This effectively replaces broken `OrElse`.
I wonder if there is a way to do:
```
    class Foo(...):
        legends = List(...)
        legend = Dict(..., lambda: d list(d.items()))
```