File I/O!!!

A whole bunch of changes, but here are the big ones:
- Constructor now initializes an fstream, and destructor frees it
- init() now handles two cases, one with file I/O (added here, does not use random generation or Chamber class), and one without it (the code from before this update).
- Dragons in file I/O version of init() are assigned to random hoards in such a way that every dragon is guaranteed to get a hoard of its own (prioritizes hoards with fewer competitors).
- slight change in nextFloor(): init() is now only called if numFloors is 8 or less at the end of the file. This is done to prevent init() being called on an empty filestream (file contains exactly 8 maps).