PluginManager: strongly typed LoadState enum.

Moved it out of AbstractPluginManager to save some typing, added EnumSet
LoadStates to preserve old functionality (checking LoadState to set of
values). Slightly changed the names, as they make sense now because the
name is fully-qualified (AbstractPluginManager::Static would be
confusing, but LoadState::Static is intuitive). Also updated debug
output operator to include fully qualified name in output and added test
for it. Also function documentation now properly enumerates which all
values can be returned.
PluginManager: deinlined "heavy" functions.

Constructors, getters and setters which operate on strings are not
simple enough to be inlined.
PluginManager: documentation cleanup and update.

Private members are not needed in public Doxygen API documentation,
removing superfluous comments and converting the rest to normal
comments. Also removed from Doxygen public members which shouldn't be
used directly by users.
PluginManager: fixed naming of AbstractPluginManager::Version.

Also one error message had expected and actual value swapped, fixed
that.
PluginManager: no leading underscore in function parameters, it's ugly.
PluginManager: minor code cleanup.
PluginManager: leave LoadState in original state on failure.

Return failure from load(), unload() or reload(), but loadState() should
be left in state as if nothing happened, because the error doesn't
affect next calls to load() etc. (there might be already fixed plugin
files, removed dependencies and instances etc).
PluginManager: removed metadata reloading and reload().

Automatic metadata reloading on load() or unload() could lead to
unexpected behavior when the plugin suddenly disappears from the list.
Better solution is to allow this to be done only explicitly by e.g.
reloadPluginDirectory(). Removed reload(), as the function would now
just unload the plugin and then load it again, which is meaningless.

Not yet sure how to properly implement reloading plugin metadata for
single plugins.
PluginManager: using CORRADE_ASSERT() for static plugins errors.

The errors should be for developer, not for user, thus assert instead of
gracefully printing error and continuing.
PluginManager: inverted if block.

Less indentation is better.
PluginManager: don't just delete all plugin instances on destruction.

Do instead only simple unload() and assert its output. Its up to library
user to take care of proper manager destruction order, forcibly removing
the instances would do only harm.
PluginManager: removed AUTOMATIC_INITIALIZER() from PLUGIN_REGISTER().

Static plugins are compiled into static library and because of that the
automatic initializer is either not called at all (because nothing
references the initializer and thus it is removed as unneeded) or called
twice (because PLUGIN_IMPORT() references it and also calls it). Now the
initialization is done only in PLUGIN_IMPORT().

Also changed the warning about static plugin added twice to assertion,
as it now shouldn't fire at all.
PluginManager: merged two loops together.
PluginManager: simplified file filtering code.
PluginManager: swapped function call direction.

Moreover it now documents behavior of setPluginDirectory() better.
PluginManager: avoid some needles string copying.
PluginManager: various cleanup, added TODOs.
PluginManager: make implicit Plugin constructor optional.

It is now possible to forbid instantiating Plugin subclass without
PluginManager.
PluginManager: renamed Plugin to AbstractPlugin.

Fixes a few Doxygen issues and clarifies what the class actually is.
Also made destructor pure virtual to force subclassing.
PluginManager: non-templated internal implementation of instance().

Also fixed the code to do only one search instead of two.