recursive==False uses next(iter) for PY3 compatability; added tests to make sure it doesn't recurse