Clarify `isAssignable` documentation. Add private `isRvalueAssignable` and `isLvalueAssignable`.

Previously `isAssignable` worked like `isLvalueAssignable`.

Also add some unittests.