from @gidden:
Ok, I still think we don't have a clear picture of how we want this to work. Why is a copy constructor used over the constructor that takes a context as its argument? I think there are different pros and cons, and I think we should agree on one methodology.

A valid (and concise) option would be to move all work done in the `InitFrom` methods into derived classes respective copy constructors. E.g.

```
Model::Model(const Model& m) {
  ctx_ = m.ctx_;
}

MyModel::MyModel(const& MyModel mm) : Model(m) {
  member_ = mm.member_;
}
```

Right now, we currently have both implementations in the code base, and I don't think it breaks anything as is, it's just poor form. Since this functionality is being targeted, I think there's an argument to be made that this nonuniformity is a show stopper for this PR (but we could also accept this and make a high priority issue). I'll let you and @scopatz weigh in.