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__`

see this comment https://github.com/sympy/sympy/pull/7824#discussion_r17892414

`Routine` should still do it's own argument validation. The `routine` function may make some assumptions about intended behavior that `Routine` won't. In my mind, `routine` is the "easy" access. Give it a tuple of symbols, an expression, and a language, and it returns the most likely setup. For example, `C` would change matrices inplace, while `octave` would return them. But if a user wanted to initiate a routine in octave that modified a matrix in place, they still could by creating the routine using the `Routine` class directly.