First Order Logic

- [ ] Make sure tests pass
- [ ] Use Symbol everywhere, not strings (or Constant or Variable or whatever)
- [ ] Add docstring with doctest to every class and function (including and especially abstract classes, although the abstract classes do not need to have doctests if that does not make sense). Major methods of classes should have this as well. 
- [ ] Address https://github.com/sympy/sympy/pull/7608#discussion_r15020433
- [ ] Address https://github.com/sympy/sympy/pull/7608#discussion_r15247231
- [ ] Address https://github.com/sympy/sympy/pull/7608/files#discussion_r15974116
- [ ] https://github.com/sympy/sympy/pull/7608/files#discussion_r15974291
- [ ] Use a single to_cnf and to_dnf and use dispatching to distinguish the two. 
Since this is the function that Constant class is so important for, it might be worth it to explain how it will behave in this function (compared to the other classes).

I also don't see `Constant` mentioned in the code anywhere, so how is it actually handled differently? Is it just because it's not a subclass of `Applied`?