Revises randomFillShifts

First this reorders clauses to match the order of fields within the
Shift datatype (i.e., shift designator first, person second). That
involves changing the where clause to a let and moving it within the
body of the do block.

Next the use of zip and map in pairing up people with shifts was changed
to use zipWith. zipWith is like a generalized version of zip, you just
provide it with a joining function on two elements and it lifts the
function to work on lists of those elements. In this case we can lift
the Shift constructor to work on lists of shifts and Persons.
Revises randomDay

The point of this version of randomDay is to highlight the fact that
this function is really a wrapper around randomFillShifts. With some
more thought about control flow this function could probably be
eliminated.

Notice how I once again use fmap to lift the Day constructor (with its
first argument applied) into the IO context to wrap the value returned
from the call of randomFillShifts. Without the do-syntax around,
hopefully this looks as thin as it is.