Separation Logic for Multithreaded Object-Oriented Languages: Full-Fledged Verification and Automatic Parallelization of Programs