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

This is pretty much a copy-paste of the old `Routine` init method. It was ugly before. Still ugly now. The point was to separate `Routine` the data structure from it's creation, so that different languages with different ideas about how a routine should look can create them and still use the same structure. Takes the magic out of the class and puts it here instead.