minor fixes to surface-based coding

- better Python3 compatibility
- more implementations & use of '__str__' instead of '__repr__'
- more robust check for nproc=None and no process (brought up by unit test in Python3)