haskell optimiziations

Contains basically 3 optimizations:
- (major) use a RandomGen value inside pure functions instead of creating a vector of random Ints
- (major) change Room type into something suitable for an unboxed vector, since it's just numeric data
- (minor) incorporate rooms length check into genLevs' function

Should bring down running time by around 20%; no need for -funbox-strict-fields anymore.
Signed-off-by: Michael Karg <mgoremeier@gmail.com>