Added first draft of VectorOperator

First need to implement a NodeTransformer as this issue will make heavy
use of them
Added NodeTransformer interface which NodeConstant implements

Node now has a .getNodeTransformer() instead of .toNodeNumber()

This commit has multiple compiler errors
Implemented NodeVector transformer

NodeConstant should not implement transformer, instead Node.getTransformer
(renamed) should be used.

Renamed existing NodeVector.toNodeVector to .toVector as Vector to avoid
ambiguity and Vector is also the return type.
Refactorings throughout the nodes and operators packages
to use NodeTransformers instead of the old .toNodeNumber()

Each Node class now has its own private implementation of the NodeTransformer
interface which gets lazily instantiated in the overriden .getTransformer()
method from Node.
Modified VectorOperator to use new NodeTransformers

Added MatrixOperator that can only accept a matrix as an argument
Fixed bug with result types in VectorOperator

If the result of the operator contains only one element and the argument
itself was a number, the result should become a number as well instead
of a vector with one element. Otherwise the original result is returned.

Also fixed #3
Modified various UnaryOperators to inherit VectorOperator

If, Sort and Sum now inherit from VectorOperator.
NodeNumber versions of Matrix and Vector were also made public instead of
package private
Converted Log operator to a VectorOperator

The operator now treats all input as a vector through the superclass. If
the input is a matrix it is converted to a vector of vectors. If the size
of the internal vectors is two then the log base [0] of [1] will be
calculated
Fixed efficiency bug in ExpressionParser

When a function or variable was being added, the expression was being parsed
twice each time. Now it is only parsed the once.
Fixed #4

Single row matrices now get parsed correctly instead of being parsed as
multi-row matrices, each with one element. Implemented using a flag
that keeps track of whether or not a vector is present inside matrix. If
not then the matrix must consist of one row.

Also modified the invalid matrix dimension error message to include
the expected dimensions of the matrix.
Short string representation of matrices is used with UnaryOperators

When calling the .toString() method on a NodeExpression, if the operator
is a UnaryOperator, the short string representation of the first argument
is used in the case that it is a matrix.
Renamed SimpleUnaryOperator to NumberOperator

Renaming to fit in with VectorOperator and MatrixOperator as
SimpleUnaryOperator operates solely on single number nodes

Moved NumberOperator out of the simple package to the unary package.

Updated references to NumberOperator to reflect renaming.
Removed SimpleUnaryOperator source file
Added Reverse operator

Reverse operator reverses the order of a vector

Fixed #2