Structural Characterisations of Hereditary Graph Classes and Algorithmic Consequences