Add first (rough) dm sniffer implementation

Still need a lot of refactoring with parser and sniffer, more tests, and logic cleanup.