state: use Option<T> instead of manual has_attr booleans
I am not 100% sold on this one: on the one hand the has_foo stuff is ugly but on the other hand this patch pushes the burden of calling unwrap_or_default() on the caller... but maybe being explicit about that is actually a good thing.
Also, it makes the code shorter, which is always good