input: Write a function to implement a priority queue with a max_pop method that uses a custom max function.
  ```python
  assert pq.isEmpty() == True
  pq.insert(3)
  pq.insert(1)
  pq.insert(4)
  pq.insert(1)
  pq.insert(5)
  pq.insert(9)
  pq.insert(2)
  pq.insert(6)
  pq.insert(5)
  assert pq.isEmpty() == False
  assert pq.max_pop(lambda x, y: x if x > y else y) == 9
  assert pq.max_pop(lambda x, y: x if x > y else y) == 6
  assert pq.max_pop(lambda x, y: x if x > y else y) == 5
output: class PriorityQueue:
      def __init__(self):
          self.queue = []
  
      def isEmpty(self):
          return len(self.queue) == 0
  
      def insert(self, item):
          self.queue.append(item)
  
      def max_pop(self, max_func):
          if self.isEmpty():
              return None
          max_item = self.queue[0]
          for item in self.queue:
              max_item = max_func(max_item, item)
          self.queue.remove(max_item)
          return max_item
  
  # Example usage
  pq = PriorityQueue()
  assert pq.isEmpty() == True
  pq.insert(3)
  pq.insert(1)
  pq.insert(4)
  pq.insert(1)
  pq.insert(5)
  pq.insert(9)
  pq.insert(2)
  pq.insert(6)
  pq.insert(5)
  assert pq.isEmpty() == False
  assert pq.max_pop(lambda x, y: x if x > y else y) == 9
  assert pq.max_pop(lambda x, y: x if x > y else y) == 6
  assert pq.max_pop(lambda x, y: x if x > y else y) == 5