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
This should also optionally take generators as keyword arguments to customize the generation of numbered functions and constants.