This commit contains the following:
- It adds methods to `Message` to assign a priority level to messages.
Currently there are four priority levels: High, Medium, Low, VeryLow
but this is easily changeable.
- It introduces a new class `PriorityQueue` which implements a FIFO queue
for storing messages based on their priority level in addition to oder
in which they are added.
If the priority level of an already queued message in a `PriorityQueue`
is changed, the associated queue will automatically move the message
within the queue based on its new priority level.
Internally the implementation uses a circular doubly linked-list with
an array of tail pointers associated with different priority levels.
- It adds new methods and an `Iterator` class in `MessagePool` to access
the priority queue where all allocated and queued messages from this
pool are stored. The `Iterator` class allows bi-directional iteration
through the list (from highest priority to lowest or reverse).
- This commit also contain detailed unit-test for all the newly added
features/methods.