States: CLOSED → OPEN (after threshold failures) → HALF_OPEN (aftercooldown ms) → CLOSED (on success) or OPEN (on failure).
solve(threshold, cooldown, calls) where each call is [time, 'success' | 'fail'].
Returns array of 'allowed' or 'rejected' (rejected = call short-circuited).
Sample tests