templater: abstract ifcontains() over wrapped types
This allows us to make .keytype private.
There's a minor BC that a hybrid dict/list of keytype=None now strictly
checks the type of the needle. For example, {ifcontains(rev, files)} no longer
matches a file named "1" at the rev=1. I made this change for consistency
with the get(dict, key) function. We can restore the old behavior by making
keytype=bytes the default if desired.
fixbundle() {
grep -v 'saving bundle' | grep -v 'saved backup' | \
grep -v added | grep -v adding | \
grep -v "unable to find 'e' for patching" | \
grep -v "e: No such file or directory" | \
cat
}