Private impl of the NObjectIterator by creating NObjectIteratorImpl

Squash into c8b8334944d8694fe1e9cbb1f10a3f7cc1520bf7 before final merge