Object Organization - Hierarchies, collections, groups, empties? If I want to organize my sub-components into a convenient hierarchy in 2.8, what is the best approach? Should I use collections, groups, empties, or simple parenting?

First, I haven't been able to understand what "groups" are or how to create them. I read something about them in the manual, and couldn't understand what differentiates a group from a collection.

If I have some object that represents a single entity, but consists of multiple components (frame, seat, planks, cushions, etc), is it best to create a sub-collection for this? Or would it be better to identify one of the elements as the "root" and parent all other elements to it? Or is it better to create an "empty" and use that as the parent/root?

Another thing I'm trying to understand is why empties come in different modes (arrows, axes, shapes, image, etc). Is there a reason for these? Are they intended to serve as identification helpers (use a cube for a car object because the shape helps identify its owner)? Something else?

Lastly, if you guys use empties for this, anything you would advise about it? Do you change any settings or options in yours? Maybe disable visible in viewport, or some other setting?

Edit: One thing I just noticed is that you can easily duplicate an entire collection using the context menu, which is pretty convenient. Doesn't look like this is possible with an empty.

Thanks for any advice!
I would suggest using collections for grouping objects together.  It's flexible, and very orginizable.

also, there is no reason for selecting a different shaped empty except for personal preference on shape, (or for selecting a shape that fits the object like you mentioned in the question.) 

and groups are now obsolete.  They were used in 2.79 and backwards.  Collections are the new and improved thing.