Added a static factory method of(List<Object>) to all the functions so I can create them dynamically with reflection based on a general list of parameters.
Put all the functions (and ONLY the functions) in one package so reflection can easily find them.
Threw a RunetimeException instead of just printing the error and continuing when an invalid classname is hardcoded into OrderOfOperations
Changed the generic list type in all of the of() methods from List<Object> to List<?>, because List<Object> is non-covariant.
Forgot of() in Sum, added it.
Reworked ParsedMathFunction to take advantage of the expression package. It uses a lot of reflection when constructing a ParsedMathFunction object (and has a lot of possible RuntimeExceptions so be careful!), but when calculate() is called, it only uses a Term object. Only using a Term object only incurs the cost of referencing objects in the heap, unlike the previous half-solution which had to recursively parse a string for every call to calculate, which would easily get time-complex when done for every pixel in the width of a screen.
Fixed a bug in ParsedMathFunction that tried to use the global variable 'expression' in the private method splitIntoArguments instead of its passed parameter, 'paramString'. This caused the recursion to continually evaluate the same string and led to quick StackOverflowError.