Added C2 and C4 options for staggered upwinding derivative.
Change to implementation of boundary conditions: Boundary conditions on the values of the fields are set before each evaluation of the RHS function if the new flag BoundaryOp::apply_to_ddt is false. Boundary conditions are applied in solver::add() regardless of apply_to_ddt so that the initial profiles always obey the boundary conditions. Some evaluations of applyTDerivBoundary() are now redundant (when apply_to_ddt is false), but the error checking needs re-writing as well so that they do not get set to NAN.
Added applyBoundary(const char* condition) { applyBoundary(string(condition)); } to Field2D and Field3D because otherwise, e.g. applyBoundary("dirichlet") would be evaluated by applyBoundary(bool init) instead of applyBoundary(const string condition) because of the type conversion ("dirichlet" has type const char*).