Plane class

# TODO

- [ ] test coverage
if you write `def equation(self, **syms):` then you could write x, y, z = `[syms.get(i, Symbol(i)) for i in 'xyz']`. I don't think you want what you wrote because that clobbers any input variables that the user gave. You could also put None after each symbol in the function args list and then write `x, y, z = [i if i else Symbol(j) for i, j in zip((x, y, z), 'xyz')]`.  It might make sense to make the vars real since this might simplify calculated results later. (?)