Malaysian police have fired tear gas shells and water cannons to disperse hundreds of activists at an opposition-backed rally in the capital Kuala Lumpur.