Expose an Encoding/Versioning interface for use with etcd

etcd_tools.go is not dependent on the specific implementation
(which is provided by pkg/api).  All EtcdHelpers are created
with an encoding object which handles Encode/Decode/DecodeInto.
Additional tests added to verify simple atomic flows.

Begins to break up api singleton pattern.
I spun on that a bit - maybe we want EtcdHelper to actually be the only interface we need (as you're suggesting).  In which case you give an EtcdHelper when you want to add higher level datastore operations on top of etcd, and to that effect its *better* to not be able to call directly into a raw client.  Also, EtcdHelper can potentially do more to normalize errors (so instead of returning etcd.ItemAlreadyExists, return apiserver.ItemAlreadyExists) in which case this becomes much closer to resource/etcd than tools/etcdhelper.