modelize_property: add annotation `lazy`

Signed-off-by: Jean Privat <jean@pryen.org>
modelize_property: add a guard for lazy attributes

Signed-off-by: Jean Privat <jean@pryen.org>
comp: clean AAttrPropdef#compile_to_c

Signed-off-by: Jean Privat <jean@pryen.org>
comp: compile `lazy` in the getter

For primitive and nullables, lazy is implemented with an additionnal
boolean attribute used as a guard.
The guard is also update in the setter.

For nonnullable val*, lazy is implemented with issset that is currently
only correctly implemented in this subcase.

One isset has a good implementation, the guard implemnatation can be
removed.

Signed-off-by: Jean Privat <jean@pryen.org>
niti: clean AAttrPropdef#call

Signed-off-by: Jean Privat <jean@pryen.org>
niti: Interpretor provides a service isset_attribute

Signed-off-by: Jean Privat <jean@pryen.org>
niti: extract attribute expr evaluation in its own method

Signed-off-by: Jean Privat <jean@pryen.org>
niti: implements lazy in the getter using isset

Signed-off-by: Jean Privat <jean@pryen.org>
tests: add base_attr_lazy

Signed-off-by: Jean Privat <jean@pryen.org>