Added skeleton sources and build files
Parsed the domain hierarchies with regexes
Got the naive version working, doesn't run fast enough
This is the version sent off

This has a number of serious issues:

 - It doesn't do a proper cost calculation of elements - I misunderstood and
    over-simplified that part.

 - I believe there's correctness issues with the dynamic programming approach
    (later swapped back to naive and added caching).
Decided to get it working anyway (post submission)

Added some simpler tests - to narrow down various corner cases and
to get closer to some parsing/cost functions that can be called
directly (instead of indirect through the levenshtein stuff).

Switched back to a naive version (slow). then added minimal
memoization - works well.

Added a parameterized cost function for swap add and del. Made the algo
very general which allows us to test on simpler items (eg: strings) easily.

This took quite a while to iron out all these issues. Feels like a longer
task than two hours.
Added some property based checks

Don't really love how long they take to run