Added the ability to remove panels at each layer in the Panel API

The purpose of this change was to enable perspective switching without
resource leaks in the templated panel system. That goal is not yet
achieved because the Templated panel system always uses a null Position
for child panels, and the only way to remove a child PanelDefinition is by
position (the new stuff I added does it by layer: Presenters remove
Presenters from themselves, Views remove Views, etc.). So it’s not currently
possible to remove a child the PanelDefinition.

I’m committing this now because it’s working properly for the classic panel
manager and the changeset is getting big.
WIP: merged templated perspective feature back into uberfire-workbench-client

It is now possible to mix and match templated and classic perspectives in the same app.

There are still some correctness problems that I'm woring out, and a lot of tests are still to come.
But the basic refactoring has proven a success.
Fixed splash screen lifecycle and perspective switching problems with templated root panel