Lazy default values

This PR adds new feature where you can set an attribute to be lazy so that its default value will be evaluated when reader is called for the first time (just like it used to be for all attributes).

Another change is that default values are now set in the constructor instead of being lazy all the time. This speeds up reading significantly and adds more flexibility.