add gshell and re-implement some other stuff

remove a bunch of optional blocks because they arent optional. its simple gnome depends on all things gnome, plus dbus

blocks have limits, they do not know about stuff declared in other blocks

example: gshell_role_template must be called outside of the user_gshell block because
its called by user_gsession.common_subject which is declared in the the user_gsession block

if you try to call it from within the user_gshell block then it does not know the user_gsession.common_subject type

this is just one of the block limitations, in practice they can only be used in a meaningful way for trivial things

when things get slightly more complicated block can't handle it