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

> 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.

As the name is optional, it'd be more like `Result(expr)` or `Result(expr, name=something)`. I don't see a problem with this. I'd rather not introduce yet another type into codegen.