[WIP] - Code Printing refactor, matrix support

** Edit **
This started out as just adding support for `Matrix` in codeprinting/codegen, but turned into a fairly substantial refactor of the existing codebase. I have updated this to reflect that. The TODO list is a trimmed down version of the original TODO, `autowrap` support should come in a later PR, this only has to do with printing now.

See my mammoth sized comment below for what's inside this PR now
** end edit **

TODO:
- [x] Support for matrix output in ccode and CCodeGen
- [x] Support for matrix output in fcode and FCodeGen
- [x] Support for `MatrixSymbol` input in ccode and CCodeGen
- [x] Support for `MatrixSymbol` input in fcode and FCodeGen
- [x] Tests
we're hardcoding double, it's reasonable for floats but I have some some applications where I can forsee it being useful to do the same for integer types as well. maybe ``_declare_fp_num_const`` or something similar would be more accurate name here?