refactor for Codegen Routine

For OctaveCodeGen (pr #7824), I need some refactoring of `Routine`.

- [x] add Fortran matrix tests
- [x] add C matrix tests
- [x] move language specific stuff out of `Routine.__new__`
- [x] rework docstrings
- [ ] clear-up FIXMEs on name versus result_var in docstrings.

see this comment https://github.com/sympy/sympy/pull/7824#discussion_r17892414

> Or maybe I've misunderstood? Do you mean things like `arguments` must be {OutputArgument, InputArgument, InOutArgument}? Can you give me a fragment of the sort of "validation" you have in mind?

Yeah. Check that the arguments are of type `Argument`, and that all the necessary ones are there (i.e. if `expr=a + b + c + d`, then a, b, c, and d better all be arguments). Same for results, make sure they are all of type `Result`. This is just validation, and makes no assumptions about the problem.

The `routine` function can make assumptions, such as assuming for octave that no `OutputArgument` types are wanted. So `routine` can accept normal `Symbol`, `MatrixSymbol`, ... as arguments, and normal expressions, and implicitly create `Argument` and `Result` instances as it thinks should be done for that language. Does that make sense?

> This will require further testing: it probably breaks my Octave stuff for example. But perhaps we can work towards that...

Full support in the codeprinters/generators for everything acceptable by `Routine` isn't necessary (at this point at least). Only users who *know* what they're doing will be using it directly, so some errors are expected.

Does that make sense?