[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»`

to:
`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.

but:
* 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.

isidoro