[WIP] Octave/Matlab codegen and code printing

I'm working on Octave/Matlab code printing and codegen support.

 - [X] Octave code printer
 - [x] Octave codegen
 - [x] Lists
 - [X] Matrix printing
 - [x] Matrix output from codegen
 - [x] codegen: assert filename and function name match, this should be true for the first function in a file.
 - [x] multiple functions per file tested.
 - [ ] multiple functions per file documented scope of results.
 - [X] Logical ops
 - [x] Logical, `True`/`False`
 - [x] Tests, based on C/Fortran tests.
 - [x] Piecewise support
 - [ ] Comment headers to appear after the function prototype line.
 - [X] Use vectorized elementwise operations, e.g., `.*`, `.^`, (unless we know a Matrix is involved?)
 - [x] More special cases for `.*` and `.^`
 - [X] Indenting
 - [x] deal gracefully like C/Fortran with "not supported"...
 - [X] Is superclass `CodeGen` a bit too C/Fortran specific?  mathematica.py
       was a bit thinner, but is for code printing, not codegen.  Seems it will be ok, especially after @jcrist's recent changes.
 - [X] loop structures.  At least for now, we don't attempt to "vectorize" these.
 - [ ] Fix ordering of outputs.  Codegen sometimes puts in alphabetical order (when they have names via `Eq(name, rhs)`?)  I think they should go in the order I provide them in the `(name, [expr1, expr2, expr3])` list.  If I want to some autosorting, give set or other unordered datastructure?  Inputs should be alphabetically sorted unless the user specifies an order.
 - [x] Single-statement/single line support?  This is important for generating "handle functions", e.g., [https://github.com/cbm755/octsympy/blob/master/inst/%40sym/matlabFunction.m] as opposed to .m files.  Currently everything is inline.  but I haven't tested tensors yet.
 - [ ] Fix Routine code that conflicts with C/Fortran, see @jcrist comment below.

Comments/help very welcome!
I'm playing in pr #8082, appreciate any input.