Wrap goroutines inside `GoRoutineRecovered` to protect

If a goroutine crashes in go, the app itsself will also crash. This commit adds a method `GoRoutineRecovered` to be used for wrapping code to be run on a goroutine so we can protect it with `recover()`.

I also updated all existing goroutines in beego to use `GoRoutineRecovered`.