Refactor projection code and add options

- Support several different projection modes: Parallel, pinhole, fisheye, planar, spherical, and panoramic.
- Additional projection modes can be added by adding cases to an enum and a switch.
- Each projection mode has its own minimum and maximum *recommended* field of view settings, but this only affects the slider; smaller or larger values can be input if the user *really* wants to make e.g. a 720 degree panorama. 
- Depth of field can be applied to any other projection mode (including the parallel one).

This fixes #114.