Add object attribute writing

This is a preparation PR for a HUGE refactoring I'm working on.

Using this, we can refactor the whole abstract shell surface attribute
handling (for example, I'd bet half of the chocolate I will receive on
christmas that there are much more locations we can use this) and
remove quite a big bunch of code in favour of abstraction.

Please review carefully and provide me your suggestions.