Cleaning Up/Fixing Context Switching

Not sure how it was working before, I never entered user mode so
I think I just got lucky that the user task never overwrote data
on the kernel stack.

Now it works properly and is organized a little better.
Creating Task Struct

This change creates a task struct to hold the task id and stack
of the task.

It provides a task_create() method that fills in the stack with
default values, so that it can be started in k_exit.