Vagrant synced folders aren't case sensitive
Solution 1:
I worked around the issue on OS X by creating a sparse disk image in my project folder and formatted it to be case sensitive.
After mounting the sparse image, I moved my code onto it. Then replaced the original "src" folder with a symlink/alias to the mounted image. This way the shared folder is case sensitive inside the guest OS.
Definitely not the most elegant solution but it does close the gap between deployment and development environment which is why I started using Vagrant in the first place.
Perhaps a similar workaround could work for Ubuntu and Windows too?