Effective choice and boundedness principles in computable analysis