code: function rebindMatch ( template, next, previous ) {
    	var keypath = template.r || template;
  
    	// no valid keypath, go with next
    	if ( !keypath || typeof keypath !== 'string' ) return next;
  
    	// completely contextual ref, go with next
    	if ( keypath === '.' || keypath[0] === '@' || (next || previous).isKey || (next || previous).isKeypath ) return next;
  
    	var parts = keypath.split( '/' );
    	var keys = splitKeypathI( parts[ parts.length - 1 ] );
  
    	// check the keypath against the model keypath to see if it matches
    	var model = next || previous;
    	var i = keys.length;
    	var match = true, shuffling = false;
  
    	while ( model && i-- ) {
    		if ( model.shuffling ) shuffling = true;
    		// non-strict comparison to account for indices in keypaths
    		if ( keys[i] != model.key ) match = false;
    		model = model.parent;
    	}
  
    	// next is undefined, but keypath is shuffling and previous matches
    	if ( !next && match && shuffling ) return previous;
    	// next is defined, but doesn't match the keypath
    	else if ( next && !match && shuffling ) return previous;
    	else return next;
    }
docs: this is the dry method of checking to see if a rebind applies to a particular keypath because in some cases, a dep may be bound directly to a particular keypath e.g. foo.bars.0.baz and need to avoid getting kicked to foo.bars.1.baz if foo.bars is unshifted