Reduce error margin to 1 tile instead of 2

This margin stills allows to draw 36000+ tiles which is more than enough.
Add specification for layout of chat for working group categories
Wrap table layouts for working groups in a parent table layout
Select fixed layout based on selected grouping category

This completes step G of the algorithm:

  G) To render a visualization for a selection of authors
     grouped by current criteria (categories), start with
     a group layout (fixed for a fixed number of categories).
Extract function selectLayout() for anonymous subscription
Define each layout as a function which returns a layout to customize

The layout array will be modified with maximum dimensions commputed
for each row and each column in each table layout.
Reset the layout each time selected categories are updated
Move getExpectedWidth() to getExpectedCircleWidth() in layout-utils.js

This is the first function of a new module for layout utility functions.
Compute the dimensions of each group based on number of authors within

This completes the step H of the algorithm:

  H) For each group with a circular shape, look up the maximum dimension
     for the number of tiles in the group. The length of linear shapes is
     the number of tiles in the group:

     - the height of vertical lines equals the number of tiles,
       their width is 1

     - the width of horizontal lines equals the number of tiles,
       their height is 1