Move viewport functions to their own file
Refactor how viewport scroll and scale work

- Just sets a value on the viewport, and triggers "InvalidateViewport"
- Rendering code takes care of applying the correct transforms
- Insert a "PostRender" event to allow cleanup after rendering
Fix mistake in filtered map.search results
Merge pull request #525 from starwed/viewport-cleaner

Viewport refactoring (round 1)