Refactor tag class

I ensured all the tests were passing, but I commented one or two out because I believe it was outside the scope of that class (at least my vision for the class). In order to just refactor the tag class, I had to make minor modifications to most of the other classes.

Let me know what you think of these changes!