[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
This is leftover from the previous implementation, just moved out to its own function so `codeprinter` could become more reusable. I can see the need for an integer declaration, but I'm not sure how we'd infer types. The default in the code printers is to print all numeric constants to full precision, which in most cases is desired as the constant is a float (pi, e, etc...). Perhaps this could be a change later?