Add Ellipse2D model

This is a generalization of the circular `Disk2D` model.  Should `Disk2D` be made a subclass of `Ellipse2D`?