Full type support for protos, including enums (!)

I've conformed pretty closely to the Dart TC52 spec. I added a commit or two to fix a few things though:

* hashCode/equals aren't necessary as the only values are const.
* Added 'values' List as per the spec.
* Renamed _name to _displayName and added toString().
* Made the constructor private now that hashCode/equals are gone.