Given a list of reservation time slots, write a function to merge overlapping intervals and identify available booking windows.
Use half-open intervals [start, end), and merge intervals that overlap or touch. Implement merge_reservations(slots, window_start, window_end), returning [merged_slots, available_windows], where available windows are gaps inside the requested booking range.
Example 1: slots = [[1, 3], [2, 5], [7, 9]], window_start = 0, window_end = 10 returns [[[1, 5], [7, 9]], [[0, 1], [5, 7], [9, 10]]].
Example 2: slots = [], window_start = 2, window_end = 6 returns [[], [[2, 6]]].
def merge_reservations(slots, window_start, window_end):