compiler: Support for merging assertions

- Change MergeIdenticalSteps from generating its own lookup keys for
  steps to delegating to MergeableStep.mergeKey. The default
  implementation does the same as before (i.e. renamed to result temp to
  a fixed temp value)

- Add MergeableSideEffect trait that also uses a fixed temp value to as
  a placeholder for steps that don't produce results

- Make AssertPairMutable and AssertRecordLikeClass use
  MergeableSideEffect

- Change CastCellToSubtypeChecked to exclude its error message from its
  merge key