Compute all trigrams of an iterable and yield them. You probably want
    to do something like:

    >>> t = set(make_trigrams('hi there'))

def make_trigrams(i: Iterable[T]) \
        -> Iterable[Tuple[Optional[T], Optional[T], Optional[T]]]:
    """
    Compute all trigrams of an iterable and yield them. You probably want
    to do something like:

    >>> t = set(make_trigrams('hi there'))
    """
    q = deque([None, None, None])

    def nxt():
        q.append(x)
        q.popleft()
        return tuple(c if c is not None else ' ' for c in q)

    for x in i:
        yield nxt()

    if q[-1] is not None:
        x = None
        yield nxt()