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

If you do that readthrough:
1. why Result is not a subclass of Variable?
2. why OutputArgument exposes `result_var` via its constructor but Result does not?

Just documented for now is fine for me.

Also: my understand of C/Fortran is that they use a Result if expression has no LHS symbol.  And they always use OutputArgument for `Eq(f, 2*x)`.  I suppose this is the sort of thing an expert user might want to control by using Routine directly.  Somewhat confusingly if the thing with no LHS is a MatrixSymbol, then it instead becomes an OutputArgument with a made-up name.  At very least, this should be documented somewhere.  I added a docstring example which sort of demonstrates this: please look that over and see if its helpful or if we need some further docstring about this.