Adding support for VariadicExpression

This involved creating the VariadicExpression class (as a subclass of NaryExpression) and change about 6 classes to use the new class. Test code was changed accordingly where necessary.  There are some mongo deviations here but they seem to be conscious decisions on our part.

We should make our error codes match the mongo codes in behavior. It looks to me like they just lumped the date and string errors into one generic error, and we want to have compatible errors where possible.