[bitcoin/bitcoin] Refactoring CRPCCommand with enum category (#13945)

Thanks for your attention @251Labs!

For simplicity, just speaking about «hidden» category and `visibility` property:

Without enum RPCCategory, how will I proceed to add the visible property?
First I will add the property `visibility` field to the structure CRPCCommand, then
I will search for the the string «hidden»:
in the last commit df660aa7717a6f4784e90535a13a95d82244565a on master branch, now I have 16 results (only searching on *.cpp/h files) where 13 are related directly to CRPCCommand, and 1 used to decide to show or not those command in the help command: `pcmd->category == «hidden»`.
And ok than I will modify those 13 lines of code, adding the `false` for the `visibility` field (maybe I can add a CRPCCommand constructor so, the default value for `visibility ` will be true).

Then I’ll modify the name of those hidden category, e.g:
`{ «hidden», «invalidateblock», &invalidateblock, {«blockhash»} }`

will become:
`{ «blockhain», «invalidateblock», &invalidateblock, {«blockhash»}, true }`

and then I’ll modify:
`pcmd->category == «hidden»`

`false == pcmd->visibility` // yes putting the constant on left it can helps (but ok it’s another argument)

Everything is ok, it compiles, tests and CI Travis are ok, and we are all happy.

* I wouldn’t be sure 100% to catch all the «hidden» category: infact:
* I made the search only in *.cpp/h files;
* how would I caught the string `»hi» «dden»` searching for `»hidden»` (it could be a command hiding itself to be in «hidden» category!)?
* By mistake I introduced a mispelled category: «blockhain».

So without enum RPCCategory, we cannot be 100% sure:
* we forgot some commands in «hidden» category;
* we introduced typos in category’s identifiers.

Having enum RPCCategory we can be 100% sure, at compile time (!):
1. we are not forgetting some commands in «hidden» category.
2. we are not introducing typos in category’s name.