Compatibility with 2.9. When going 2.10-specific I guess we can come up with even better macro-based solutions. That could get reflection out of default values as well. Still, for future reference:

```
  def extractFields(tag: ClassTag[_]): Seq[(String, Option[() => Any])] = {
    val mirror = ru.runtimeMirror(getClass.getClassLoader)
    val clazz = mirror.classSymbol(tag.runtimeClass)
    val module = clazz.companionSymbol.asModule
    val im = mirror.reflect(mirror.reflectModule(module).instance)
    val ts = im.symbol.typeSignature
    val method = ts.member(newTermName("apply")).asMethod
    method.paramss.flatten.zipWithIndex.map {
      case (param, index) =>
         ts.member(newTermName(s"apply$$default$$${index + 1}")) match {
           case NoSymbol => param.name.toString -> None
           case symbol => param.name.toString -> Some(() => im.reflectMethod(symbol.asMethod)())
         }
    }
  }
```