device class: improved stability and extended interface

1. mesh operating functions, such as assigining eps and doping,
are moved to private fucntions -> called within 'update()' method.
--> allows to seperate global value assignement operations from
actual mesh assigining methods

2. added quantityi availability check routines: a problem, such as laplace,
can now ask the device class whether a eps is available on a specific segment
--> throws if not -> can be nicely handled in the GUI
device: added 'make_neutral()' -> allows to unassign a segment role

also added exception in 'update()' method, thrown when a segment
lacks an assigned 'role'
fixed include guard in 'capacitor3d.hpp'
device: added material lib guard + fixed missing resize in update()
added material accessor ('category')+corrected capacitor templates

material accessor: added an accessor which allows querying all available
materials of a specific category. is used in ViennaMOS to evaluate
all available, for instance, semiconductors.

capacitro templates: siegfried's examples are based on a stack of
oxide-semiconductor-oxide. imho this is weird, as it should be the
other way around, but anyway. as I am at the moment not deriving
contact/oxide/semiconductor role from the material (I think there might
 be cases where a semiconductor is used  as a conduct, a highly doped one,
yes, but nevertheless. so I think it helps specifically associated
a role with a material.) I created semiconductor segments instead
of oxide segments in the templates. this might indiciate the fundamental
disadvantage of my approach, but we will see. can be changed at any time.
added 'set_device' method to simulator class