add support for etag

while the etag could previously be used by direct option access, this
adds convenience attributes .etag and .etags (for responses and
requests, respectively, as they differ in the cardinality of etags).

this lays the groundwork for matching blockwise responses based on their
etags.
validate response blocks based on etags

this catches cases of fast-changing resources that need to be
transferred in a blockwise way.

a new error is introduced (and the error hierarchy rebased onto an iot
error) to handle the case.

please review for correct use of exceptions, errbacks and defer.fails.
basic server-side observe support

observations can not be cancelled so far; this would require getting
are response back from the exchange on whether it ended by a timeout, an
ack or by RST (which is how observations are cancelled as of -09)
basic client-side observe support

implemented as a callback, because deferreds can only fire once.

does not evaluate the observe option yet for deduplication, neither
provides the convenient deblockwising of the rest of the library
only subscribe to the first block
use binary tokens

tokens as previously sent were generated in hex space, but sent as ascii
string. tokens shoud really be binary in coap.
solve TODO: send a copy of acknowledgement

all sent packages that have an eqivalent entry in recent_messages are
now stored there to be retrieved when a duplicate arrives.