Name server implementation, message types and bug fixes
Name server uses a simple array of pairs to store registered names. Design decisions: Names should be at most 20 characters (+ a null terminator). Each task can only register one name. Additional calls to register will overwrite the previous name. If multiple tasks register the same name, the task which first registered a name will be returned.
For message types: all types should be in message_types.h. Use the typed wrappers around Send/Receive/Reply to take advantage of the typed requests. It is useful for servers to enforce specific request types (etc to differentiate between requests and throw obvious errors on accidental unintended calls to the server). For other tasks, can use as makes sense (has a little more overhead to do additional type checking if you're just sending a string for testing).