Write an efficient function to interpolate missing values in a time-series stream.
Implement interpolate_missing(values), where values is a list of numbers or None. Replace each None between two known values with its linear interpolation. Leave leading, trailing, and entirely unbounded missing values as None.
Examples: [10, None, None, 40] returns [10, 20.0, 30.0, 40]; [None, 5, None, 11, None] returns [None, 5, 8.0, 11, None].
Constraints: 1 <= len(values) <= 1000; known values are integers or floats.
def interpolate_missing(values):