TODO:
-----
Clean this up and/or break into separate files.

{"camliVersion": 1,
 "camliType": "claim",
 "camliSigner": "....",
 "claimDate": "2010-07-10T17:20:03.9212Z", // redundant with data in ascii armored "camliSig", 
                                           // but required. more legible. takes precedence over
                                           // any date inferred from camliSig
 "permaNode": "dig-xxxxxxx",        // what is being modified
 "claimType": "set-attribute",
 "attribute": "camliContent",
 "value": "dig-yyyyyyy",
 "camliSig": .........}

claimTypes:
-----------
"add-attribute" (adds a value to a multi-valued attribute (e.g. "tag"))
"set-attribute" (set a single-valued attribute. equivalent to "del-attribute" of "attribute" and then add-attribute)
"del-attribute" (deletes all values of "attribute", if no "value" given, or just the provided "value" if multi-valued)

"multi".. atomically do multiple add/set/del from above on potentially different permanodes. looks like:

   {"camliVersion": 1,
    "camliType": "claim",
    "claimType": "multi",
    "claimDate": "2013-02-24T17:20:03.9212Z",
    "claims": [
         {"claimType": "set-attribute",
          "permanode": "dig-xxxxxx",
          "attribute": "foo",
          "value": "fooValue"},
         {"claimType": "add-attribute",
          "permanode": "dig-yyyyy",
          "attribute": "tag",
          "value": "funny"}
    ],
    "camliSig": .........}

Attribute names:
----------------
camliContent: a permanode "becoming" something.  value is pointer to what it is now.


Old notes from July 2010 doc:
-----------------------------
Claim types:
permanode-become:
   -- implies either:
        1) switching from typeless/lifeless virgin pnode into something (dynamic set, filesystem tree, etc)
        2) changing versions of that base metadata (new filesystem snapshot)
  -- ‘permaNode’ is the thing that is changing
  -- ‘contents’ is the current node that represents what permaNode changes to
set-membership: add a blobref to a dynamic set
  -- "permaNode" is blobref of the dynamic set
delete-claim:  delete another claim (target is claim to delete)
  -- "contents" is the claim blobref you’re deleting
{set,add}-attribute:
  -- attach a piece of metadata to something.
  -- use set-attribute for single-valued attributes only: highest dated claim wins (of trusted person) e.g.  "title", "description"
  -- use add-attribute for multi-valued things. e.g. "tag"

Tagging something:
{"claimType": "add-attribute", //
  "attribute": "tag",  // utf-8, should have list of valid attributes names, preferrably not made up by us (open social spec?)
  "value": "funny",  // value that doesn’t have lasting value
  "valueRef": "sha1-blobref",  // hefty reference to a lasting value
 
  "claimer?": "sha1-of-the-dude-who’s-signing",
  "claimDate": "2010-07-10T17:20:03.9212Z",
  "claimType", "permanode-become",
  "permaNode": "sha1-pnode",
}

filesystem root claim:
{
  "camliVersion": 1,
  "camliType": "claim",

  // Stuff for camliType "claim":
  "claimDate": "2010-07-10T17:20:03.9212Z",  // redundant with data in ascii armored "camliSig".  TODO: resolve
  "claimType", "permanode-become",

   // Stuff for "permanode-become":
  "permaNode": "sha1-pnode",
  "contents": "sha1-fs-node"

,"camliSigner": "digalg-blobref-to-ascii-armor-public-key-of-signer",
"camliSig": "......"}
