Note: There are additional roles for server configurations such as Processing, Reporting and Publishing.
Sitecore's ARM templates look to solve this problem in that they can quickly spin up and configure a Sitecore server, but this only works when using Azure PAAS. For those not using Azure PAAS, manually adjusting the configuration files can be time consuming.
Sitecore Server Switch looks to solve this issue by using PowerShell. After installing Sitecore on a server, you can run the "Sitecore_Switch_CM_CD_Lucene_Solr.ps1" script to configure a server as a CM server, as a CD server and additionally configure it to utilize either Lucene or Solr indexing.
Sitecore Server Switch currently supports Sitecore 8.0 (all versions) and Sitecore 8.2 Update 2. More versions are coming soon.
Sources
Sitecore Server Switch GitHub SourceSitecore Server Switch on the Sitecore Marketplace (coming soon!)
Acknowledgments
Big shout-out to Sarkis Einarsson for his PowerShell scripts that were the base of this project. (http://sitecoreunleashed.blogspot.com/2015/09/sitecore-8-toggle-cd-configuration.html)Additional Reading
You can also take this to the next level and automate everything. Check out Patrick Perrone's work into this space with his automation scripts.Update (03/01/2017)
And of course, how it usually happens, after writing this module and post, I came across this site that has some automation scripts for 8.2 and even includes the ability to configure additional roles: https://bitbucket.org/sitecoreautomationteam/sitecore-automation/wiki/sitecore-environmentNote: I have not tested this.
And I've also been made aware of Michael West's PowerShell scripts as well: https://gist.github.com/michaellwest/d1124a459cb1fb47486f87d488ecfab8