Reading this thread has been really surprising, I would have expected "const" to help the compiler do better work at collapsing constants.
The C++ FQA (the smug answer to the C++ FAQ) has a great way of explaining this. C++'s unofficial motto should be: "Theoretically, yes. In practice, no." The issue of const helping the compiler is exactly one of those situations. Theoretically, it should help. In practice, it doesn't.
Ultimately, "const" means "semantic constant". It's there (theoretically!) to help the programmer, not the compiler. At the time of writing (and after using C++ for 20 years) I think the only sensible use is as documentation.
Assuming const DOES help, I think everything should be const by default and only mutable via a keyword.
Yes, the ML solution.
There are some extremely good reasons for this, not the least of which is that it's one way to make the Simula-style object model (which C++ inherited) logically sound.