objgenerator: Implement return with value and .close() method.

Return with value gets converted to StopIteration(value). Implementation
keeps optimizing against creating of possibly unneeded exception objects,
so there're considerable refactoring to implement these features.
py: Add support for user-defined iterators via __iter__, __next__.
Merge branch 'gen-close-ret-val' of github.com:pfalcon/micropython into pfalcon-gen-close-ret-val
py: Use _is_subclass_fast instead of _exception_match.
Merge branch 'master' of github.com:micropython/micropython