A group is its own data type in the scripting language. All units belong to a group. If units are linked together in the editor, they are all part of the same group. If a unit isn't linked to anyone else, then it belongs to its own group.
The AI makes many decisions as an entire group, instead of on an individual unit level. For example, behavior, combat mode, and waypoints are decided on a group, not an individual level.
Note that empty objects do not belong to a group. Nor do empty vehicles.
To get the group that a unit belongs to, use the group command.
To get the unit that currently leads a group, use the leader command.
To get an array of units that are in a group, use the units command.
In V3.5 a new group type was introduced, called a "Structured Group", which allows the creation of hierarchical battle groups.
Related commands: setStructureGroup, selectLeaderSG, getCommandLevel, etc.