Shared Stripe-style search support.
This implements the same structural pieces for every search endpoint:
parsing to a small AST, validating fields against each resource's schema,
evaluating clauses over resource maps, and returning Stripe's
search_result pagination shape.
Summary
Types
@type field_schema() :: %{required(String.t()) => field_type()}
@type field_type() :: :numeric | :string | :token