use Expression instead of String for marking in GrantRevoke

Same as the previous commit, this is needed to allow binding the marking
as a JDBC parameter.
no repeated compartments in markings

HashSet<Compartment> wasn't accomplishing what I wanted in Marking
because Compartment doesn't have innate equality. Using Map<String,
Compartment> instead to ensure no duplicate compartments.
finish random test data generation