The Goulden—Jackson cluster method: extensions, applications and implementations