BUG-648: Fixup hashCode/equals

The baseline hashCode/equals implementation relied on the copied maps
for correctness. Iterable<?> in and of itself does not really have a
equals contract, so let's reimplement it and make it very explicit.

This patch is required for getting rid of the copied maps without
breaking users.

Change-Id: I2fcd2bc8775b60cf89bf03a5679f97a266cf1c1e
Signed-off-by: Robert Varga <rovarga@cisco.com>
BUG-648: Provide framework for eliding copying builder maps

This patch introduces builder-side safeguards which will cause the
builder take the copying hit after the target object was built. This is
an improbable operation, as most builders are forgotten after single
use.

Also make use of that knowledge and do not instantiate ImmutableMaps in
the nodes.

Change-Id: I98ef73f04a1f85c7355388eaaaafc99143b396f3
Signed-off-by: Robert Varga <rovarga@cisco.com>