Also, please make an:
```scala
object ReflectionUtils {
  def fieldsOf[T](c: Class[T]): Set[String]
  //for a given class, give a function that takes a T, and a fieldname and returns the values
  def fieldGetters[T](c: Class[T]): (T,String) => AnyRef
  //functions of T, fieldName, fieldValue that returns a new T (possibly a copy, if T is immutable)
  def fieldSetters[T](c: Class[T]): (T,String,AnyRef) => T
}
```
Then just call these functions on the object in either the Unpacker or ReflectionSetter.  Won't this kill any code duplication?