anchor.diff:  .Example how obtain a size of specific type spec
   [source, clojure]
   ----
  -(buf/size (buf/int16))
  +(buf/size buf/int16)
   ;; => 2
   
  -(buf/size (buf/string*))
  -;; => IllegalArgumentException No implementation of method: :size of protocol: #'bytebuf.proto/IStaticSize found for class: bytebuf.spec.string$string_STAR_$reify__1804  clojure.core/-cache-protocol-fn (core_deftype.clj:555)
  +(buf/size buf/string*)
  +;; => IllegalArgumentException No implementation of method: :size of protocol: #'bytebuf.spec/ISpecSize found for class: bytebuf.spec.string$string_STAR_$reify__1804  clojure.core/-cache-protocol-fn (core_deftype.clj:555)
   ----
   
   === Define own type spec
  
positive.code: are easy understand, the size of the spec can be know in any time. But in some circumstances
  we want store arbitrary length types.
  
  Arbitrary lenght strings is a clear example, and _bytebuf_ comes with that type spec implemented:
  
  .Example writing arbitrary length string into buffer
  [source, clojure]
  ----
  (buf/write! buffer "hello world" (buf/string*))
  ;; => 15
  ----
  
  
negative.code: (require '[bytebuff.core :as buf])
  
  ;; Indexed composition
  (def my-spec1 (buf/spec buf/int32 buf/bool))
  
  ;; The same spec but using associative composition
  (def my-spec2 (buf/spec :field1 buf/int32
                          :field2 buf/bool))
  ----
  
  You can check that the spec size (in bytes) and number of types internally is the same
  