(Please excuse the German screen shots)
I did it this way with your example data....
Solution 1
1. Sum Up Work
Add an additional column to your table labelled Work and sum up the required hours:
tasks ↓ / people → |
Corge |
Grault |
Waldo |
Work |
foo |
1 |
5 |
9 |
15 |
bar |
2 |
6 |
0 |
8 |
baz |
3 |
7 |
3 |
13 |
qux |
4 |
8 |
5 |
17 |
2. Add Column Work in Gantt Chart
Add the additional column Work to your Gantt Chart. Now add the individual tasks and in the column Work add the hours required to complete the task. When finished add the dependencies to your tasks.
Project will then add a Start Date and End Date based on the reuqired hours. You will have something similar to this:

3. Add Resources to Project
In the Resource Table view, add the three resources (of type Work) to the table.
This will look at bit like this:

4. Split Screen Gantt / Resource Usage
You will have a screen that looks like this:

5. Assign Resources to Tasks
In the top window in the column for resources, assign the appropriate resources.
foo --> Corge, Grault, Waldo
bar --> Corge Grault
baz --> Corge, Grault, Waldo
qux --> Corge, Grault, Waldo
Project will equally distribute the workload between the resources. We have to correct this!

6. Correct Hours
With the table we have at the beginning, correct the hours that the resources will be working on the individual tasks (bottom window) in the Work column:

7. Manual to Automatic Mode
Mark all tasks in the top windows and in the ribbon bar for Tasks switch to Automatic Mode.
- Project will notify you that Waldo is overloaded.

To correct this deduct one hour from the 9h and put that hour in the next day.

8. Going From Here
If you now assign different calendars or holidays to the individual in the Resources, then Project should take this into account and re-distribute the work/tasks.
I put Waldo on holiday on the 22nd in his Resource Calendar and Project shifts the whole plan:

Solution 2
This solution differs from my initial solution from step 2 on.
2. Add Column Work in Gantt Chart
Add the additional column Work to your Gantt Chart. Now add the individual tasks and in the column Work add the hours required to complete the task. Do not add a start time and do not add dependencies.
3. Add Resources to Project
In the Resource Table view, add the three resources (of type Work) to the table.
This will look at bit like this:

4. Split Screen Gantt / Resource Usage
Split the screen to show tasks in the top window and resources in the bottom half.
5. Assign Resources to Tasks
In the top window in the column for resources, assign the appropriate resources.
foo --> Corge, Grault, Waldo
bar --> Corge Grault
baz --> Corge, Grault, Waldo
qux --> Corge, Grault, Waldo

Project will new equally distribute the workload between the resources. We have to correct this!
6. Correct Hours
With the table we have at the beginning, correct the hours that the resources will be working on the individual tasks (bottom window) in the Work column:

7. Add Start Date and Dependencies
Add one start date to your first task and the dependencies.
Project will now magically assign the correct hours to the resources:

Good luck!