AbstractComponent.setParent(parent) cannot be called if component already has parent, unless the new parent is null (unsetting parent).
AbstractComponentContainer.addComponent(component) removes the component from it's previous ComponentContainer if needed (moves component), or throws if the component can't be removed.
Fixes #1137
All components that contain other components should implement ComponentContainer for this to be perfect (e.g CustomComponent, Table)