apex:PageMessages is a containing component where any messages that have been added to the page will appear.
apex:pageMessage is a component that adds a single message to the page.
apex:message allows you to associate a message with a component
I’ve not used apex:messages – I can’t see how it particularly differs from apex:pagemessages
ApexPages.Message is the class that is used to model a message. A message isn’t associated with a page until it is added via the ApexPages class.
ApexPages is a class that allows you to access the current page (through ApexPages.CurrentPage()) and manage messages for the current page.
I’d start off adding an apex:pageMessages component to the top of your page and then add some messages in programmatically via the ApexPages methods – that should help clarify things.