First implementation of Electromagnetic pusher. Some testing is still required. Documentation needs to be upgraded to match the changes in this branch.