Rewrite symbolic ref targets

#501 plus some refactoring... rewriting history is fun!

This includes the `SymbolicReference.Target` changes proposed in #503 (wanted dedicated space for that discussion). Without fixing `Target`, this implementation gets a bit weird.

@1162972 is worth pointing out because it's the first non-additive change to a rewriter signature on `RewriteHistoryOptions`. To avoid a breaking change, I introduced a new (temporary) rewriter and marked the current one as `[Obsolete]`. Then after the next release we can reclaim the preferred name and deprecate the other.