Command Interface

This isn't ready for merge yet, PRing for code review/comments.
A `New` that initializes the map looks like the cleanest solution.