Ionization in PIConGPU

# Ionizatiooooooon! :zap:  
-------------------------
Finally ... a working rudimentary version of ionization can be introduced to the PIConGPU project. This feature is yet unphysical because it makes use of an ionization model that was tailored to assure that one can check the number of particles that are created in the process. Still it features already all important mechanisms and lacks therefore only the physically field-tested ionization schemes.   

~~### IMPORTANT: Do not merge, yet because of perfomance issues with the trait `GetCharge()`   
The trait `particles/traits/GetCharge.hpp` had to be edited and now also needs the attribute `chargeState` in addition to `weighting`. So currently every particle has a `chargeState` and this is pointless e.g. for electrons.~~

-----------------
## The new feature includes: 
- [x] a new particle **attribute** `chargeState` 
- [x] a new **example** `LWFA_with_Ionization` 
- [x] an **ionization model flag** `particleIonizer< IonizationModel< SpeciesToBeCreated > >`
- [x] a simple ionization model `BSI` (Barrier Suppression Ionization) with **arbitrary** ionization threshold
- [x] a **fallback** for particle species without the ionization flag
- [x] **particle creation** during simulation runtime

## Features not included but yet to come:
- [ ] physical ionization models like `ADK`, real `BSI`, various field ionization models
- [ ] starting simulation with neutral atoms? (that might require much change)
- [ ] momentum conservation
- [ ] energy conservation with ionization current

## Future prospects:
- Multi-Photon Ionization for lower laser intensities
requires *field-to-photon-and-back* conversion :wink: @PrometheusPi 
- Impact- / Collision Ionization in cooperation with @mxmlnkn 


my poor tries:

```diff
diff --git a/src/libPMacc/include/particles/memory/dataTypes/Particle.hpp b/src/libPMacc/include/particles/memory/dataTypes/Particle.hpp
index 277e098..0a0571d 100644
--- a/src/libPMacc/include/particles/memory/dataTypes/Particle.hpp
+++ b/src/libPMacc/include/particles/memory/dataTypes/Particle.hpp
@@ -27,6 +27,9 @@
 #include <boost/utility/result_of.hpp>
 #include <boost/type_traits.hpp>
 #include <boost/mpl/if.hpp>
+#include <boost/mpl/filter_view.hpp>
+#include <boost/mpl/placeholders.hpp>
+#include <boost/mpl/bool.hpp>
 #include "traits/HasIdentifier.hpp"
 #include "compileTime/GetKeyFromAlias.hpp"
 #include "compileTime/conversion/ResolveAliases.hpp"
@@ -167,13 +170,17 @@ PMacc::Particle<T_FrameType1, T_ValueTypeSeq1>,
 PMacc::Particle<T_FrameType2, T_ValueTypeSeq2>
 >
 {
-    typedef PMacc::Particle<T_FrameType1, T_ValueTypeSeq1> Dest;
-    typedef PMacc::Particle<T_FrameType2, T_ValueTypeSeq2> Src;
+    typedef PMacc::Particle<T_FrameType1, T_ValueTypeSeq1> DestFull;
+    typedef PMacc::Particle<T_FrameType2, T_ValueTypeSeq2> SrcFull;
+
+    typedef typename boost::mpl::filter_view< T_ValueTypeSeq2,
+                                              boost::is_floating_point<typename boost::mpl::placeholders::_1>::type /*boost::mpl::bool_< typename traits::HasIdentifier<DestFull, boost::mpl::placeholders::_1>::type::value >*/
+                                            >::type NewValueList;
 
     HDINLINE
-    void operator()(Dest& dest, const Src& src)
+    void operator()(DestFull& dest, const SrcFull& src)
     {
-        algorithms::forEach::ForEach<typename Dest::ValueTypeSeq,
+        algorithms::forEach::ForEach<NewValueList,
             CopyIdentifier<bmpl::_1> > copy;
         copy(forward(dest), src);
     };
```