Write a clean, reusable utility function to deep-merge two complex JSON configuration objects, handling edge cases like array merging and null values.
Implement deep_merge(base, override). Recursively merge dictionaries, concatenate lists in order, and use the override value for scalars, type conflicts, and explicit null values. Return a new JSON-compatible value without mutating either input.
Input values may contain only dictionaries, lists, strings, numbers, booleans, and None. The function must return the merged value.
def deep_merge(base, override):