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
- [x] rework Result, added NamedResult.
- [ ] clear-up FIXMEs on name versus result_var in docstrings.

see this comment https://github.com/sympy/sympy/pull/7824#discussion_r17892414

I suppose I could then name it the way I want into the language specific `OctaveCodegen.routine` instead of in the OctaveCodegen itself...  That does sound nicer.

One (minor?) downside is the order of the inputs will not match `OutputArgument(name, result_var, expr)` because a `name` kwarg here will force `Result(expr, name)`, which is unfortunate.  `NamedResult` matches `OutputArgument` order.

Or---thinking out loud---maybe I should switch the order in `*Argument`, then `result_var` could be a kwarg and default to `name`...  hmmm...