Implement stream-based PNG reading; add class ArrayStream

Uses exceptions for errors. Should be more robust than ever before. Briefly tested load->save->load.