webadmin: Simplify titel initialization of base page

Target: trunk
Require-notes: no
Require-book: no
Acked-by: Paul Millar <paul.millar@desy.de>
Patch: https://rb.dcache.org/r/7089/
Intern several strings on message deserialization

Serialization/deserialization of messages with an object stream reset
in between messages has the side effect of completely decoupling those
object graphs. Thus elements (like strings) that were shared before,
are no longer shared when deserializing. This wastes a lot of memory
for string fields with a small universe of possible values.

This patch adds code to internalize some string fields during deserialization.
This is only done for fields for which the value would typically come from
a relatively small domain.

The particular messages touched by this patch related to the active
transfers page in webadmin and the patch thus reduces the memory footprint
of that information.

Target: trunk
Require-notes: yes
Require-book: no
Acked-by: Paul Millar <paul.millar@desy.de>
Patch: https://rb.dcache.org/r/7088/
webadmin: Reimplement active transfers page

Reimplements most of the active transfers page of webadmin, including the
information gathering logic, transfer cancellation, pagination, sorting,
filtering, etc.

Queries to gather information about active transfers are no longer
sequential: Both queries to login brokers, doors, and pools are
done concurrently. This should lead to much more up to date information
on large and busy systems.

Transfer cancellation is no longer done per pool. Instead all selected
transfers are aborted concurrently.

The amount of state copied into each view is much smaller. Rather than
repeatedly copying the transfer state into ActiveTransferBean,
ActiveTransfersBean is used as the data model in the MoverDAO.

The entire list of active transfers is no longer copied into each
instance of the page. This copy could quickly lead to problems to
memory consumption, in particular when several clients opened the
page at the same time. Instead the shared list of active transfers
is exposed as a data provider. The data in this provider is
rendered by a Wicket DataTable component.

Pagenation, sorting and filtering are implemented server side. This
has the benefit that when a very large number of transfers are ongoing,
not all of them need to be rendered at once. Sorting and filtering
is pagenation aware. Since these things are implemented server side,
the pagenation, sorting, filtering and selection state survives
automatic form reloading.

The selection state has been decoupled from the data model, meaning
that there is no need for the SelectableWrapper hack.

I followed Wicket recomendations and did *not* introduce a separte panel.
It is easy enough to refactor once the same view is needed somewhere
else. Until then a separate panel just clutters the code.

Target: trunk
Require-notes: yes
Require-book: no
Acked-by: Albert Rossi <arossi@fnal.gov>
Acked-by: Karsten Schwank <karsten.schwank@desy.de>
Patch: https://rb.dcache.org/r/7084/