Recursive version.

Uses Guava libs to simplify map management, easy to sub out if desired
Test naming tweaks
Partial js implementation
Partial JS
Implementation that doesn't use filter