Generator level heavy flavour jet origin/flavour identification

Original implementation of the code for finding flavour, origin and leptonic decay of heavi flavour hadrons/jets.
This implementation still uses a copy of GenJetParticles module to inject ghost hadrons into generator jets.
This could be replaced by an existing new implementation of jet flavour identification which already injects wide range of particles into jets. In order to use reclustered jets from jet flavour ID one would need to replace the input genJets collections in the PhysicsTools/JetMCAlgos/python/sequences/GenHFHadronMatching_cff.py sequences.

A very simple test config file has been added: PhysicsTools/JetMCAlgos/test/genHFHadronMatcher.py

It doesn't produce any input since this would need to write information into some ROOT file. It just checks whether the algorithm runs in the particular release.

This code has been tested to compile and run in CMSSW_7_1_6 release on lxplus0185.
Hello Tae Jeong, this is not true.

Here I'm trying to check one particular case important for our tt+bb analysis, which is to detect whether additional b hadron comes from the top decay chain but not directly from top or it is really additional b outside the tt system.

Since top quark doesn't always decay to *b* and *W*:
 - at line 729: first occasion of quark coming from top is detected and stored as a direct quark from *top* or *anti top*.
 - at line 732: if there was already found a quark but it was not a *b quark*, but the current particle being checked is a *b quark* then it is assigned as a direct quark from *top* or *anti top*
 - at line 733: if there is a *b quark* found already but the new particle being checked is also a *b quark* but with higher pT, then it is assigned as a direct quark from *top* or *anti top*

If the `if` statements are removed then the logics will break. Sorry for not properly documenting this part of the code.