Web.JSON: Add JSON special tokens (true/false/null) support in encode({object}) function.

#### Summary
Now Web.JSON support `true`, `false`, and `null` tokens in its `encode` function. You can use these tokens as

```vim
let s:JSON = s:V.import('Web.JSON')
echo s:JSON.encode([
    \ s:JSON.true,
    \ s:JSON.false,
    \ s:JSON.null,
    \])
" it will display '[true, false, null]'
```

---

#170 で問題視した部分の修正案です。`s:JSON.true`のようにJSON上で`true`を表すトークンなどが定数として（Vitalの予定機能）宣言されているので、これを`s:JSON.encode(val)`で用いると、JSON上で`true`と表現されます。

なお`s:JSON.decode(val)`に関しては後方互換性のためにいじっていないため`[true, false, null]`というJSONが`s:JSON.decode(val)`に渡されると`[1, 0, 0]`というVimオブジェクトに変換されます。個人的にはリバーシブルではない実装は気持ちが悪いので後方互換性を捨てたいですが……

Vitalのコードを読むのも書くのも初めてなので、問題等あればご指摘ください。

あと基本的なストラテジーは [webapi-vim](https://github.com/mattn/webapi-vim/blob/master/autoload/webapi/json.vim#L116) のパクリです。Public domainということで問題は無いと思いますが、嫌だなとかあればご指摘ください（@mattn さん）

このPRはPR #171 が示されている[Commit Rule](https://github.com/vim-jp/vital.vim/wiki/Commit-Rule) に従っていなかったため、コミットメッセージなどを調整し、別ブランチとして再度PRを送ったものです。
`Funcref`であり、までは理解しましたが、そのあとの「格納できる変数の名前に制限」というのはどういうことでしょうか？勉強不足で申しわけありません…