LPS-48994 SF
LPS-48728 add repository registry core classes

The idea is to be able to register new repositories (each with different
sets of capabilities) at runtime. For that, people will need to implement
the RepositoryRegistryPlugin. The portal will call the registry plugin
to register a repository creator (the name RepositoryFactory was already
taken) and its capabilities.
LPS-48728 add skeleton plugin for liferay repositories
LPS-48728 move LiferayRepository initialization logic into factory

Create the LiferayRepositoryCreator and move all Liferay*Repository
initialization logic into it.

Use the new repository creator inside the factory. Note that this is a
temporary step to keep tests passing; once finished, I'll remove all
this hardcoded code (and the spring beans).
LPS-48728 add skeleton plugin for external repositories
LPS-48728 move external repository initialization code
LPS-48728 use plugins to create repositories
LPS-48728 wire capabilities in the registry plugins
LPS-48728 add repository events core classes

The event system has three main concepts:

  - RepositoryEventType: Represents the different kinds of events that
    repositories can trigger. By using intefaces instead of an enum to
    represent event types, we're able to check at compile time that
    listeners are wired to the correct event type (i.e. it is a compile
    time error to try, for example, to register a delete listener to an
    "update" event). This is important because, internally, events are
    saved into a map where that type information is lost.

  - RepositoryEventListener: An event listener for a particular event
    type.

  - RepositoryEventHandler: Allow consumers of the API to trigger
    events of the supported types. The CapabilityRepository will use
    this to trigger events when adding/deleting/etc elements.
LPS-48728 replace hardcoded code by events
LPS-48728 don't expose implementation details

The `deleteTrashEntry` methods are implementation details of Liferay's
trash capability. Don't expose them in the interface and register the
events in the capability itself.
LPS-48728 use the repository catalog for external repos

The current external repositories are referred to as "legacy" because
from now on, users are supposed to register repositories using the new
plugins, and not using the dl.repository.impl property.
LPS-48728 register/unregister plugins using RepositoryCatalog

When registering a repository, only expose its className if it
"isExternal" returns true. A repository is external if it should appear
in the UI as a mountable repository.
LPS-48728 deprecate unused method
LPS-48728 Rename to Legacy
LPS-48728 Get rid off classname and use classnameId to avoid having the same information in 2 different ways
LPS-48728 Use the existing terms for "supported" and "exported"
LPS-48728 Shuyang and Hugo were working on a parser that was going to add final everywhere
LPS-48728 SF
LPS-48728 SF