title: Cleaner way to update nested structures
body: <p>Say I have got following two <code>case class</code>es:</p>
  
  <pre><code>case class Address(street: String, city: String, state: String, zipCode: Int)
  case class Person(firstName: String, lastName: String, address: Address)
  </code></pre>
  
  <p>and the following instance of <code>Person</code> class:</p>
  
  <pre><code>val raj = Person("Raj", "Shekhar", Address("M Gandhi Marg", 
                                             "Mumbai", 
                                             "Maharashtra", 
                                             411342))
  </code></pre>
  
  <p>Now if I want to update <code>zipCode</code> of <code>raj</code> then I will have to do:</p>
  
  <pre><code>val updatedRaj = raj.copy(address = raj.address.copy(zipCode = raj.address.zipCode + 1))
  </code></pre>
  
  <p>With more levels of nesting this gets even more uglier. Is there a cleaner way (something like Clojure's <code>update-in</code>) to update such nested structures?</p>