API Change: Sanitise() now returns a sanitised copy

Also refactored the core logic to use recursive logic for traversing data
structures.