DESCRIPTION Iterate over class´s list of devices,
and call fn for each, passing it data. If start is set, the
list iteration will start there, otherwise if it is NULL,
the iteration starts at the beginning of the list.

We check the return of fn each time. If it returns
anything other than 0, we break out and return that
value.

fn is allowed to do anything including calling back into
class code. There´s no locking restriction.