Rampslide sparks (take 2)

Updated duplicate of #48, with some spark improvements and networking

Things that could/should be done:
- [ ] Emit something other than sparks (dust) when sliding on grass/dirt/etc. This would probably entail moving all the tracing client-side and removing the networked var
- [ ] Add client cvars to toggle rampslide sparks or control their size/etc
Minor - its possible to reduce the nesting here quite a lot by inverting the ifs and returning false immediately, e.g.

    if (pPlayer->GetGroundEntity() != NULL) // Rampsliding occurs when normal ground detection fails
        return false;

    // Take the lateral velocity
    Vector vecVelocity = mv->m_vecVelocity * Vector(1.0f, 1.0f, 0.0f);
    float flHorizontalSpeed = vecVelocity.Length();
    if (flHorizontalSpeed <= SV_TRIMPTRIGGERSPEED)
        return false;

    // etc