I'm using Disk Inventory X. It's not ideal according to your criterias since it only does 1 and 2 but it does them really well and its free.
After you run it against a disk or folder you get the following
Allowing you to easily drill down by file-type, folder or through the tree-map to find the files filling up your HDD.
For your third requirement Duplicate DetectiveDuplicate Detective seems popular on App-store but I haven't used it myself.