This evening was spent making sure that any word placements in the grid a) don't intersect themselves (only a problem for Knight-like moves so far) and b) aren't contained within another word.
Slightly tricky and in the current implementation requires some rather unsightly nested for loops. But they seem to work and it's only five deep (!!). Maybe I'll try and figure out a better method later.
I think just about everything is now in place. Time to write a nice wrapper function to generate the grids and then spend a bit of time testing that everything does indeed work as planned.
[Image credit: Kamal Hamid]