Maps and Arrays can be null or undefined, tested by isUnset().  (It doesn't
seem useful to differentiate null vs unset, especially since server side we
have only null).  Apart from that test method, unset collections function as
empty: a null ArrayValue has length zero, and get(...) will return undefined
for any key (but won't complain that there is no collection).

Un-defaulted map attributes are no longer SimpleValue undefined, but are actual
MapValues (with isUnset() true).  Un-defaulted array attributes were already
special cased to empty, but now also have isUnset() returning true.

Model sub-values (e.g. model.getMap() or model.getList() returning null) used
not to transfer at all, resulting in a SimpleValue on access, but now transfer
as empty.  I'm still looking at whether-and-how to capture their null-ness, and
to report same from client upbound.

@bug W-1484712@
@rev goliver@
Maps and Arrays can be null or undefined, tested by isUnset().  (It doesn't
seem useful to differentiate null vs unset, especially since server side we
have only null).  Apart from that test method, unset collections function as
empty: a null ArrayValue has length zero, and get(...) will return undefined
for any key (but won't complain that there is no collection).

Un-defaulted map attributes are no longer SimpleValue undefined, but are actual
MapValues (with isUnset() true).  Un-defaulted array attributes were already
special cased to empty, but now also have isUnset() returning true.

Model sub-values (e.g. model.getMap() or model.getList() returning null) used
not to transfer at all, resulting in a SimpleValue on access, but now transfer
as empty.  I'm still looking at whether-and-how to capture their null-ness, and
to report same from client upbound.

@bug W-1484712@
@rev goliver@
Merge branch 'fabbott/master-pending-nullmaps' of https://git.soma.salesforce.com/aura/aura into fabbott/master-pending-nullmaps
Merging origin/fabbott/master-pending-nullmaps into master