processColumnUpwards = function (column) {
        if (column.drawnWidth < column.maxWidth && leftoverWidth > 0) {
          column.drawnWidth++;
          usedWidthSum++;
          leftoverWidth--;
          columnsToChange = true;
        }
      }
@ngdoc boolean
 @name updateColumnWidths
 @propertyOf  ui.grid.class:GridRenderContainer
 @description Determine the appropriate column width of each column across all render containers.

 Column width is easy when each column has a specified width.  When columns are variable width (i.e.
 have an * or % of the viewport) then we try to calculate so that things fit in.  The problem is that
 we have multiple render containers, and we don't want one render container to just take the whole viewport
 when it doesn't need to - we want things to balance out across the render containers.

 To do this, we use this method to calculate all the renderContainers, recognising that in a given render
 cycle it'll get called once per render container, so it needs to return the same values each time.

 The constraints on this method are therefore:
 - must return the same value when called multiple times, to do this it needs to rely on properties of the
   columns, but not properties that change when this is called (so it shouldn't rely on drawnWidth)

 The general logic of this method is:
 - calculate our total available width
 - look at all the columns across all render containers, and work out which have widths and which have
   constraints such as % or * or something else
 - for those with *, count the total number of * we see and add it onto a running total, add this column to an * array
 - for those with a %, allocate the % as a percentage of the viewport, having consideration of min and max
 - for those with manual width (in pixels) we set the drawnWidth to the specified width
 - we end up with an asterisks array still to process
 - we look at our remaining width.  If it's greater than zero, we divide it up among the asterisk columns, then process
   them for min and max width constraints
 - if it's zero or less, we set the asterisk columns to their minimum widths
 - we use parseInt quite a bit, as we try to make all our column widths integers