Concepts of Task-based Programming and the PLASMA Numerical Library