1) Для асинхронной загрузки я использовал jQuery File Upload. Вообще решений очень много, но они не так что "установил и заработало" - со всеми много возни. Этот мне показался наиболее достаточным.
2) Что значит "безопасность"? Авторизация? Сами файлы вы все равно проверяете на сервере, на клиенте можно проверить лишь размер и тип файла (если речь идет об изображениях).
3) Это все на сервере делается. В комплекте с клиентской частью обычно если что-то и идет, то в очень примитивной форме. Для упрощения возни с изображениями можно использовать
WideImage.
4) Файл есть файл - будь он gif/avi/mp3/exe - не имеет значения. Любые файлы будут загружаться, просто для изображений можно выводить превью до загрузки на сервер.
Вообщем, для клиентской части jQuery File Upload вполне подойдет. Долго ли вам разбираться? От вас зависит, но разбираться придется. Доки есть, примеры есть, логика понятная.
Для серверной части пишу всегда все сам, ибо интегрировать с текущим проектом зачастую если и возможно, то получается не очень красиво.