Use descriptors for lists and to replace property

Much nicer. Less duplicate code. More transparent. Big commit.
Add help for new classes