Make OptiML more optimization friendly

- Read flattened I/O so we don't need to access the 0th row in
order to recover the number of columns.
- Make Vector zero the empty vector
- Make things more immutable