code: function( oldChild, newChild, _$destroyOldChild ) {
  
  		newChild = this.layoutManager._$normalizeContentItem( newChild );
  
  		var index = lm.utils.indexOf( oldChild, this.contentItems ),
  			parentNode = oldChild.element[ 0 ].parentNode;
  
  		if( index === -1 ) {
  			throw new Error( 'Can\'t replace child. oldChild is not child of this' );
  		}
  
  		parentNode.replaceChild( newChild.element[ 0 ], oldChild.element[ 0 ] );
  
  		/*
  		 * Optionally destroy the old content item
  		 */
  		if( _$destroyOldChild === true ) {
  			oldChild.parent = null;
  			oldChild._$destroy();
  		}
  
  		/*
  		 * Wire the new contentItem into the tree
  		 */
  		this.contentItems[ index ] = newChild;
  		newChild.parent = this;
  
  		/*
  		 * Update tab reference
  		 */
  		if( this.isStack ) {
  			this.header.tabs[ index ].contentItem = newChild;
  		}
  
  		//TODO This doesn't update the config... refactor to leave item nodes untouched after creation
  		if( newChild.parent.isInitialised === true && newChild.isInitialised === false ) {
  			newChild._$init();
  		}
  
  		this.callDownwards( 'setSize' );
  	}
docs: Replaces oldChild with newChild. This used to use jQuery.replaceWith... which for
  some reason removes all event listeners, so isn't really an option.
  
  @param   {lm.item.AbstractContentItem} oldChild
  @param   {lm.item.AbstractContentItem} newChild
  
  @returns {void}