Add a MergeConflict concept when merging data states.

This concept allows us to distinguish between "unknown" and "ambiguous"
in our data state, with the goal of this eventually leading to better
error messages. For now this interface hides the concept from the public
interface so that the more disruptive change to the rest of the codebase
can happen as a separate step.