FCodegen: add matrix tests
FCodeGen: add MatrixSlice tests, including XFAIL one
CCodegen: add Matrix tests
Codegen: refactor Routine class, add friendly "make_routine"

Put the existing Fortran/C `Routine.__init__` into Codegen class.
Essentially unchanged.  Codegen will now make appropriate instances
of Routine.  Routine is still essentially language agnostic, although
a particular instance might be more appropriate for a particular
Codegen.
Codegen: update tests to use "make_routine" instead of Routine directly
Codegen: redo docstrings, slightly simplify Argument classes

Lines to 75 chars, follow numpy style.  Some pylint fixes.
Slightly simplify Argument and its subclasses.
Codegen: do input checking in the Routine class
Codegen: refactoring of Result class, add name kwarg

1.  Result subclasses Variable so it has a name.  By default, name
    and result_var get the dummy "result_" symbol.  This was already
    the case for result_var.

2.  Add name and result_var kwargs: name defaults to None and
    result_var defaults to name.

3.  Result can work with Matrix class.  Result can take dimensions
    kwarg.  Maybe not allowed in C/Fortran but others languages might
    allow this.

4.  Document the difference between name and result_var.  Perhaps
    these could/should be refactored, but for now, document that they
    are usually the same thing.
Merge pull request #8082 from cbm755/routine_refactor

refactor for Codegen Routine