made Metric optional, replaced reflect usage with type switches

As explained in Riemann Concepts [1], the Metric field is an optional
part of an Event.  For some events, like a log error message or a
marker, metrics do not make sense.  This commit makes Metrics optional.

[1]: http://riemann.io/concepts.html

Since the issue may have been that it wasn't obvious that Metrics were
not optional due to the complex use of reflection to emulate generics,
a simpler type-switch is used to determine which protobuf type maps
best to the metric.