code: public static <K, V> Map<K, V> plus(Map<K, V> left, Map<K, V> right) {
          Map<K, V> map = cloneSimilarMap(left);
          map.putAll(right);
          return map;
      }
docs: Returns a new <code>Map</code> containing all entries from <code>left</code> and <code>right</code>,
  giving precedence to <code>right</code>.  Any keys appearing in both Maps
  will appear in the resultant map with values from the <code>right</code>
  operand. If the <code>left</code> map is one of TreeMap, LinkedHashMap, Hashtable
  or Properties, the returned Map will preserve that type, otherwise a HashMap will
  be returned.
  <p>
  Roughly equivalent to <code>Map m = new HashMap(); m.putAll(left); m.putAll(right); return m;</code>
  but with some additional logic to preserve the <code>left</code> Map type for common cases as
  described above.
  <pre class="groovyTestCase">
  assert [a:10, b:20] + [a:5, c:7] == [a:5, b:20, c:7]
  </pre>
  
  @param left  a Map
  @param right a Map
  @return a new Map containing all entries from left and right
  @since 1.5.0