Libcxx map selfassign fix

Backports a fix from upstream libc++ that fixes self-assignment operators for std::map and a few others.

The following test shows how the previous code would fail:

	#include <map>
	#include <stdio.h>
	#include <assert.h>

	int main()
	{
	    std::map<int, int> m;
	    m[0] = 1;
	    printf("m.size(): %d\n", m.size());
	    m = m;
	    printf("m.size(): %d\n", m.size());
	    assert(m.size() == 1); // Does not hold, self-assignment cleared the contents of the map!
	}