allow competitions to be viewed when not logged in

the page was trying to display a "join team" button for the current user
even when no one was logged in, which was breaking the page. there are a
couple of questionable design choices that led here but this is a quick
fix for now.
pull out team joinable logic from view

the view was getting too crowded in determining what buttons needed to
be displayed for joining teams. this is pulled back into the Team model.
use joinable? to test when a team member should be added

add_member? used to just use Team#full? to determine whether or not a
user should be added. This would allow duplicate team members which
would then raise an exception. The validation still needs to stand in
case members are added manually but we shouldn't need to raise an
exception if Team#add_member is used properly.