Refactor ParseTag

* refactor ParseTag, removing the hint. The hint was only used by code when it expected a specific tag type.
* introduce type specific Tag parsers, these replace all the uses of ParseTag with hint, and return a specific Tag implementation, not an interface.
* Add unit tests for new methods
this is a gofmt bug, http://code.google.com/p/go/issues/detail?id=8215