LPS-47508 add a `TrashCapability` to move trash logic into repositories

Currently, only the LiferayRepository supports the trash bin, but it does make
sense for other kind of repositories to support it. By representing the Trash
functionality with a capability we avoid polluting the repository interfaces
with methods that only a small subset of repositories actually need, still
allowing those that need it to implement the capability.
LPS-47508 initial implementation of LiferayTrashCapability

Move trash related code from DLAppHelper into the new capability:

  - DLAppHelper.deleteFolder -> TrashCapability.deleteFolder
  - DLAppHelper.deleteFileEntry -> TrashCapability.deleteFileEntry

For the moment, the other methods simply delegate into
DLAppHelper. Eventually, all callers of DLAppHelper trash methods will
be modified to use the capability, and those methods will be removed
from DLAppHelper.
LPS-47508 use the new capability based repository in the factories
LPS-47508 refactor repository factories

Move code shared by local and non-local factories into the base class.

Change method names to use a more precise terminology:

  - Internal repository (was Liferay repository): repository
    implementation provided by Liferay.

  - External repository: repository implementations backed by other
    products (e.g. Alfresco, Documentum, etc.).
LPS-47508 make default capabilities and exports a constant
LPS-47508 use capabilities and replace instanceof checks by capability tests

Use the capabilities to execute trash logic. Also, instead of testing for
concrete classes to check if features are supported, use CapabilityProvider
`isCapabilityProvided` method.
LPS-47508 use the capabilities in the TrashHandlers

Replace direct calls to dlAppHelper with capability uses. Also, insert
a capability use after each call to dlAppHelper.delete(File/Folder) (we need to
do so as we removed trash handling code from dlAppHelper).

Inside the trash capability we have to invoke DLAppHelper to keep
everything working. This ugliness is temporal: in the short term we'll
develop a repository event system, and capabilities will be able to
register listeners to execute when particular operations are executed.

As we move more code into capabilities those calls will be removed from
here and invoked through repository events. In this case, the trash
capability will be able to trigger a "file deleted" (or "folder
deleted") event that will execute all the additional logic.
LPS-47508 delegate into the trash capability to delete trash entries

Move all the complexity into the trash capability.
LPS-47508 invoke trash capability when deleting

When deleting file entries or folders, invoke the trash capability
explicitly.

Note that in the short term we will remove this hardcoded logic and
create an event system around core repository operations (CRUD over file
entries and folders basically). We'll move this hardcoded code into
event listeners and remove the `deleteTrashEntry` methods from the
interface.
LPS-47508 document breaking changes
LPS-47508 SF
LPS-47508 SF
LPS-47508 Match the var names in BaseCapabilityProvider
LPS-47508 Auto SF