How can I set up roles and allow users to choose which role to be?
There is a module that is supposed to cover that https://drupal.org/project/autoassignrole.

Or if you want to make it supper slim, you can add custom code to add dropdown with existing roles to account edit form and update user account on form submit.