feat: Add IP address and boot configuration fields to virtual machines
- Added `ip_address`, `vmlinux`, `rootfs`, and `bootargs` columns to the `virtual_machines` table.
- Implemented migration scripts for adding new columns and ensuring unique constraints on `mac_address`, `pid`, and `tap`.
- Updated the `VirtualMachine` struct to include new fields.
- Modified repository functions to handle new fields in create, update, and find operations.
- Enhanced the `ps` command to display the new IP address field.
- Introduced new commands for starting, stopping, and restarting virtual machines.
- Updated the `up` command to handle existing VMs and their configurations.
- Implemented a mechanism to wait for the VM to obtain an IP address and store it in the database.
- Refactored network setup to create new tap devices if they do not exist.
- Added utility functions for formatting time durations for better user feedback.