Cleanup FirmConstructor

* Introduce MapExtensions.withPersistentDefault
* Create a visitor per method