public TypeV next() {
      // 'next' actually knows what the next value will be - it had to
      // figure that out last go-around lest 'hasNext' report true and
      // some other thread deleted the last value.  Instead, 'next'
      // spends all its effort finding the key that comes after the
      // 'next' key.
      if( _idx != 0 && _nextV == null ) throw new NoSuchElementException();
      _prevK = _nextK;          // This will become the previous key
      _prevV = _nextV;          // This will become the previous value
      _nextV = null;            // We have no more next-key
      // Attempt to set <_nextK,_nextV> to the next K,V pair.
      // _nextV is the trigger: stop searching when it is != null
      while( _idx<length() ) {  // Scan array
        _nextK = key(_idx++); // Get a key that definitely is in the set (for the moment!)
        if( _nextK != null && // Found something?
            _nextK != TOMBSTONE &&
            (_nextV=get(_nextK)) != null )
          break;                // Got it!  _nextK is a valid Key
      }                         // Else keep scanning
      return _prevV;            // Return current value.
    }
Put, Remove, PutIfAbsent, etc.  Return the old value.  If the returned value is equal to expVal (or expVal is
{@link #NO_MATCH_OLD}) then the put can be assumed to work (although might have been immediately overwritten).
Only the path through copy_slot passes in an expected value of null, and putIfMatch only returns a null if passed
in an expected null.

@param topmap the map to act on
@param kvs the KV table snapshot we act on
@param key not null (will result in {@link NullPointerException})
@param putval the new value to use. Not null. {@link #TOMBSTONE} will result in deleting the entry.
@param expVal expected old value. Can be null. {@link #NO_MATCH_OLD} for an unconditional put/remove.
             {@link #TOMBSTONE} if we expect old entry to not exist(null/{@link #TOMBSTONE} value).
             {@link #MATCH_ANY} will ignore the current value, but only if an entry exists. A null expVal is used
              internally to perform a strict insert-if-never-been-seen-before operation.
@return {@link #TOMBSTONE} if key does not exist or match has failed. null if expVal is
null AND old value was null. Otherwise the old entry value (not null).
jctools-core/src/main/java/org/jctools/maps/NonBlockingHashMap.java