This adds some plumbing to pass values into the lang struct.
This will make it easier to add new solvers and also cleans up some pending issues.