templatekw: add default styles for hybrid types (issue3887)

This allows elements like file_copies to be printed as 'name (source)'
when used with join.
mergetools: avoid losing the merged version with meld

Add -o $output.
When using Meld as intended (merge from left and right into the center panel),
the merged version is written to the wrong file without this option ($base,
a temporary file, which is ignored by Mercurial).

Add meld.check=changed as a secondary safety net.
mergetools: rename 'base' to 'merged' in meld

This makes it clear which panel is the target of the merge operation.
largefiles: don't store whole file in memory for 'cat'
largefiles: fix cat of non-largefiles from subdirectory

We were calling back to the original commands.cat from inside the walk loop
that handled and filtered out largefiles. That did however happen with file
paths relative to repo root and the original cat would fail when it applied its
own walk and match on top of that.

Instead we now duplicate and modify the code from commands.cat and patch it to
handle both normal and largefiles.

A change in test output shows that this also makes the exit code with
largefiles consistent with the normal one in the case where one of several
specified files are missing.

This also fixes the combination of --output and largefiles.
largefiles: update help

Some clarifications, and some clean-up after --cache-largefiles was introduced.
largefiles: introduce lfpull command for pulling missing largefiles
largefiles: refactor overridepull internals
largefiles: introduce pull --lfrev option

The revset will be evaluated after the changesets has been pulled, and missing
largefiles from matching revisions will be pulled to the local caches.

This in combination with revsets will make it possible to specify different
strategies for pulling largefiles.

The revset expressions used for this option might be quite complex and will
probably be most useful from scripts or an alias ... but less complicated than
configuring hooks.
largefiles: introduce pulled() revset expression for use in --lfrev

This provides a general way to do what already can be done with
--all-largefiles and --cache-largefiles.
largefiles: drop --cache-largefiles again

This goes a step further than d69585a5c5c0 and backs out the unreleased
--cache-largefiles option. The same can be achieved with --lfrev heads(pulled()) and
we shouldn't introduce unnecessary command line options.
largefiles: implement pull --all-largefiles as a special case of --lfrev
largefiles: deprecate --all-largefiles for pull

The same can be achieved with --lfrev pulled() and we shouldn't advertise
unnecessary command line options.