Tidy-up of generators

  * Use new @public decorator to indicate which generators are available
  * provide new get_generators function for iterating over generators in a module