Add Ellipse2D model

This is a generalization of the circular `Disk2D` model.  Should `Disk2D` be made a subclass of `Ellipse2D`?
Sure, let me know when #2835 is merged.