move.c: Fix incorrect usage of max_group

Numerically correct (at the moment), semantically wrong.
Replace {COMPONENT,SOLDER}_LAYER with {TOP,BOTTOM}_{SILK_LAYER,SIDE} depending on usage

We used the {COMPONENT,SOLDER}_LAYER constants for two distinct meanings:

1. To identify board sides, ie. use as an integer constant representing top / bottom
2. As an offset at the end of the layer array to index the two silk-screen layers

Split the usage of these constants as appropriate, so the difference in meaning
is clear. {TOP,BOTTOM}_SIDE are used where we need an integer constant (1 and 0
respectively) refering to the side of the board. This is used, for example, as a
side specifier in draw.c, and for indexing arrays of pads per board-side in find.c.

Usage as an offset into the layer for referencing the silk-screen layers is now
{TOP,BOTTOM}_SILK_LAYER. The relevant offset of PCB->LayerN must still be added.
Create new function GetLayerGroupNumberBySide()
line.c: Cleanup group checking in drc_lines()

Avoid using an out-of-bounds layer number which might be used in future.
Use new function GetLayerGroupNumberBySide() to make code clearer

Replaces code calling GetLayerGroupNumberByNumber() against one of the
silk-screen layers in order to find the layer group containing the top
or bottom side of the board.

Patch includes various renaming of component -> top, and solder -> bottom
Rename "{component,solder}_silk_layer" to "{top,bottom}_silk_layer"

This will avoid confusion when we start adding "soldermask" layers.

The resulting variables solder_soldermask_layer and component_soldermask_layer
are not ideal (repeated use of the word solder), so lets start using "top_" and
"bottom_" to define the board sides. The corresponding new layer names are then
"top_soldermask_layer" and "bottom_soldermask_layer", which is less confusing.

Patch includes various other renaming of component -> top and solder -> bottom.
Create a new constant MAX_GROUP to size arrays of layer groups.

This is clearer than using MAX_LAYER. (Although the numbers are identical).
Move contents of PreLoadElementPCB and PostLoadElementPCB into parse_y.y

These functions are only called from parse_y.y, and access yy prefixed
variables which should be private to the parser/lexer.
parse_y.y: Don't bother setting LayerFlag[1,2] for elements - it isn't used
Determine layer count in ParseGroupString

This may break support for reading a board without a valid Groups()
construct, although that will only affect ancient PCB files.