[API Notes] Allow removal of explicit attributes via versioned API notes.

Teach API notes to distinguish between unspecified API notes and
false/empty API notes. When a versioned API note explicitly specifies
an empty/false state, *remove* an the corresponding attribute from the
AST even when it was explicitly specified in the source. This allows
headers to move forward while API notes provide backward compatibility.

Another part of rdar://problem/28455809.

(cherry picked from commit 1fbea6c310b39c87e1f78e56430569a9dcd75488)
11 files changed