Simplify FeatureFlags implementation, and fix epic = none/any for work items

What does this MR do and why?

Looking to address GLQL: how to find issues with missing epics (gitlab#583341 - closed), I started reading the code. There's a fair bit of unidiomatic/unnecessarily complex Rust in here, and I figure that, as I work on GLQL, I'll look to tidy it up.

This MR has three seven (lol) commits:

  1. Rework FeatureFlags to remove the odd HashMap and "manual defaulting", as well as remove the gap between FeatureFlags and FeatureFlag. The current implementation relies on crate::compile manually calling set on each FeatureFlag that corresponds to a given FeatureFlags field. The new one removes most of the code in utils::feature_flags while improving its usability and performance.
  2. Add failing "work items FF on" sections to the tests that need it.
  3. Fix the tests by adding Nullable to the type for the mapping for Field::Epic on issues when the work items FF is enabled.
  4. 📎
  5. Remove some aliases that make it harder to know which function is what, and an iter clone we didn't need
  6. Fix the epic tests(' generated GraphQL) by scoping the work items queries to a project
  7. Add test:graphql npm script to make this closer to hand

How to set up and validate locally

cargo nextest run 😃

Edited by Asherah Connor

Merge request reports

Loading