Add optical medium and Fermat's principle

- [x] Add Medium class
- [ ] Add tests for medium
- [ ] Add Fermat's principle
- [ ] Add tests for Fermat's principle