InstanceExtender: Add connect callback feature
Since shared connections can be re-used anywhere, it sometimes helps to be able to keep track whenever their connection state changes.
So we add a callback feature which enables us to get a notice when the connection state changes or fails.
Restructure all extenders
To make future updates easier, we need some standards for how we structure the extender classes.
We will use [name]Extender as the group container and add each ExtenderGroup/datatype inside each of them.
For an example ProeprtyExtender.File for prop files and PropertyExtender.Properties for global properties. PropertyExtender will have no instance in itself.

Also we change the way RootFW get's instances from Extenders and makes sure that this class is the only one that will be able to. And we make some instance caching for less instance creation.