Add optical medium

**To Do**:
- [x] Initialize medium with refractive index(Better API?)
- [x] Add tests for medium

Seeing examples like this, I think it'd be nice to have fundamental constants behaving like `sympy.physics.quantum.constants.hbar`, where they are printed as symbols, but can be evaluated with things like `.evalf()`.