Is this for static files or dynamic handlers? for dynamic handlers, you can easily write a piece of WSGI middleware that lower-cases all URIs:
def lower_case_middleware(environ, start_response):
  environ['SCRIPT_NAME'] = environ['SCRIPT_NAME'].lower()
  environ['PATH_INFO'] = environ['PATH_INFO'].lower()
  return application(environ, start_response)
Note that this isn't a 'bug' in App Engine - URLs are case sensitive, and the only reason things did work is because Windows, unlike most other platforms, ignores case.
For static files, add a static handler that only accepts lower case filenames, and a dynamic handler that accepts filenames of either case:
handlers:
- url: /static/([^A-Z]+)
  static_files: static/\1
  upload: static/.*
- url: /static/.*
  handler: tolowercase.py
Now write 'tolowercase.py', a handler that redirects any mixed case filename to the lower-cased version:
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
class LowerCaseRedirecter(webapp.RequestHandler):
  def get(self, path):
    self.redirect('/static/%s' % (path.lower(),))
application = webapp.WSGIApplication([('/static/(.*)', LowerCaseRedirecter)])
def main():
  run_wsgi_app(application)
if __name__ == "__main__":
  main()
Edit: Added a solution for static files.