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 don't call TrashCapability explicity in the repository

Instead, register an event listener and trigger an event when the
repository is going to be destroyed.
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 manage external state in 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 use registry API in RepositoryCatalog
LPS-48728 Rename some classes as agreed with Adolfo

  - RepositoryEventHandler -> RepositoryEventTrigger (because an
    EventHandler is like an EventListener, not the object that delivers
    the event)

  - RepositoryConfiguration -> RepositoryDefinition (because we already
    use the concept of repository configuration for the settings of
    external repositories)

  - RepositoryCatalog -> RepositoryDefinitionCatalog

  - RepositoryRegistryPlugin -> RepositoryDefiner (because it is the
    object that creates the RepositoryDefinition, and to remove
    ambiguity with the other Plugins)
LPS-48728 SF