c++: Diagnose self-recursive satisfaction
This patch further extends the satisfaction_cache class to diagnose
self-recursive satisfaction.
gcc/cp/ChangeLog:
	* constraint.cc (sat_entry::evaluating): New member.
	(satisfaction_cache::get): If entry->evaluating, diagnose
	self-recursive satisfaction.  Otherwise, set entry->evaluating
	if we're not reusing a cached satisfaction result.
	(satisfaction_cache::save): Clear entry->evaluating.
	(satisfy_atom): Set up diagnosing_failed_constraint before the
	first call to get().
gcc/testsuite/ChangeLog:
	PR c++/96840
	* g++.dg/cpp2a/concepts-pr88395.C: Adjust to expect the
	self-recursive satisfaction to get directly diagnosed.
	* g++.dg/cpp2a/concepts-recursive-sat2.C: Likewise.
	* g++.dg/cpp2a/concepts-recursive-sat4.C: New test.