Java codebase cleanup.

User-impacting changes:
-- AddressData: Deprecated getAddressLine1 and getAddressLine2 in AddressData, along with the Builder constructors (replacing with .builder() method in the address data class. Similar with setAddressLine1 and setAddressLine2.
-- AddressProblemType: Renamed enums UNRECOGNIZED_FORMAT to INVALID_FORMAT and USING_UNUSED_FIELD to UNEXPECTED_FIELD.
-- FormOptions: Removal of baseId and setter/getter methods.

Code improvements:
-- Handling custom field order in FormOptions
-- Normalization of address lines
-- Util - checkNotNull now returns the object being checked
-- NotifyingListener - the wait code has been fixed.

Other changes:
-- Extra tests
-- Documentation changes
-- Making classes final
-- Var name changes
-- Whitespace and line-break changes
-- Replacements in some locations of Android logging with standard Java logging.
This method is confusing. The method is only called in 2 places, once with arg 1, and then with arg 2.
Why does the implementation have to be this complicated? I don't understand this comment line here, the concept of "we're the last line" and "extra lines", and so forth. Why there's something like a joinedLastLine.

Why couldn't it just be addressLines.get(0) and addressLines.get(1) in the two call sites?