Facade slots and gates

In Node, gates and slots used to be stored in publicly accessible dicts (and access to these dicts was considered API).
This makes an assumptio about the implementation of Node that should not be made. For instance, a Node proxy for a matrix- or StrongCore based nodenet implementation could either not be used at all or would have to define properties for slots and gates that construct transient dicts.

With these changes, all access to slots and gates goes through methods. In addition, .parameters and .states have also been facaded with methods and hidden from public access.

Attention: When this PR is merged, native module implementations need to be updated and use
.get_gate($foo) instead of .gates[$foo]
.get_slot($foo) instead of .slots[$foo]
.get_state($foo) instead of .state[$foo]
.get_parameter($foo) instead of .parameters[$foo]

For listing slots and gate types, .get_slot_types() and .get_gate_types() must be used instead of the key sets of the dicts.