HyperPUT: Generating Synthetic Faulty Programs to Challenge Bug-Finding Tools