text: Title: [FEA] secondary index for node size
  Body: **Is your feature request related to a problem? Please describe.**
  
  In categorical settings, default node sizes should often be normalized per category, not globally, as they may be sampled from different distributions and thus relative comparison doesn't make sense
  
  **Describe the solution you'd like**
  
  ```python
  def with_degree_type_sizing(base_g):
  
      #log-scale 'g2._nodes.degree'
      g2 = base_g.nodes(base_g._nodes[[base_g._node, 'type']].reset_index(drop=True)).get_degrees()
      g2 = g2.nodes(g2._nodes.assign(degree=pd.Series(np.log(g2._nodes['degree'].values))))
      degs = g2._nodes.degree
  
      min_scale = 0.5
      type_to_min_degree = g2._nodes.groupby('type').agg({'degree': 'min'}).to_dict()['degree']
      type_to_max_degree = g2._nodes.groupby('type').agg({'degree': 'max'}).to_dict()['degree']
      mns = g2._nodes['type'].map(type_to_min_degree)
      mxs = g2._nodes['type'].map(type_to_max_degree)
      multiplier = (degs - mns + 1.0) / (mxs - mns + 1.0)
      multiplier = min_scale + (1 - min_scale) * multiplier
  
      sizes = pd.Series(degs * multiplier)
  
      return (base_g
              .nodes(base_g._nodes.reset_index().assign(sz=sizes))
              .bind(point_size='sz'))
  ```
  
  
  **Describe alternatives you've considered**
  
  additional opts
  - specify primary dimension (vs degree) and secondary (vs type)
  - specify min
  - specify preconditioner (log, ..)
  
  server support
  - in general, for multi-client
  - in legend
  - in ui
  
  pygraphistry is a good start as can ideally reuse
  
  