Added __slots__ to AttributeInspectionAgent and ScoreMutationAgent.
Introduced new top-level function: iterate()

iterate() follows the pattern of our other top-level tools, like select(),
inspect(), mutate() and attach().

Use it to expose the iteration interface, now being implemented on
iterationtools.ScoreIterationAgent.

All iterationtools functions will eventually be migrated onto
ScoreIterationAgent as methods. For now, you can try it out like so:

    >>> staff = Staff(r"c'4 \times 2/3 { d'4 e'4 f'4 } g'4")
    >>> for note in iterate(staff).by_class(Note):
    ...     note
    ...
    Note("c'4")
    Note("d'4")
    Note("e'4")
    Note("f'4")
    Note("g'4")

iterationtools.iterate_components_in_expr() has been reimplemented in terms of
the iteration interface.